我有功能看起來像這樣的:咖喱功能應該如何工作?
function curry(fn) {
var args = [].slice.call(arguments, 1);
return function() {
return fn.call(this, args.concat([].slice.call(arguments)));
};
}
我一直以爲這就是函數應該看起來怎麼樣,應該努力爲:
function add(a, b, c, d) {
return a+b+c+d;
}
curry(add, 1, 2)(3, 4);
它可以稱爲功能鏈,每個功能都有一個參數
所以咖喱應該是這樣的:
function curry(fn) {
var args = [];
return function curring() {
args = args.concat([].slice.call(arguments));
if (args.length >= fn.length) {
return fn.apply(this, args);
} else {
return curring;
}
};
}
,並作爲本:
function add(a, b, c, d) {
return a+b+c+d;
}
curry(add)(1)(2)(3)(4);
我說得對不對?
我認爲兩者都是正確的。但根據John Resig在「javascript ninja的祕密」中的第一種方法是正確的。 – AhmadF
@AhmadF怎麼回事?第一個返回一個函數,然後返回結果,第二個返回函數,直到列表或參數與函數參數的數量相同。 – jcubic
我想'函數add(a,b,c,d)'必須返回'a + b + c + d'而不是'a + b + c + c'。 – JRL