天天看點

JS程式設計建議——67:套用函數

建議67:套用函數

套用是JavaScript函數一個很有趣的應用。所謂套用就是将函數與傳遞給它的參數相結合,産生一個新的函數。在函數式程式設計中,函數本身也是一個值,這種特性允許使用者以有趣的方式去操作函數值。例如,在下面代碼中定義一個add()函數,該函數能夠傳回一個新的函數,并把參數值傳遞給這個新函數,進而實作連加操作。

var add = function(n){

}

document.writeln(add(2)(3)); //5

當然,也可以為JavaScript擴充一個curry方法,實作函數的套用應用。

Function.prototype.method = function(name, func) {

};

Function.method('curry', function() {

});

curry方法通過建立一個儲存原始函數和被套用函數的參數的閉包來工作。該方法傳回另一個函數,該函數被調用時會傳回調用原始函數的結果,并傳遞調用curry時的參數加上目前調用的參數的所有參數。curry使用Array的concat方法連接配接兩個參數數組。但由于arguments數組并非一個真正的數組,是以它并沒有concat方法,要避開這個問題,必須在兩個arguments數組上都應用數組的slice方法,這樣才會産生出擁有concat方法的正常數組。

下面就來應用curry方法,通過curry方法調用add函數,會傳回一個新的函數add1,在這個新的傳回函數中儲存了調用add函數時傳遞的值,當調用add1函數時,将新舊函數的參數進行相加,傳回7。

var add = function() {

var add1 = add.curry(2);

document.writeln(add1(3)); // 7

繼續閱讀