下面的柯里化函数不太理解,为什么可以实现fn(1, 2, 3, 4) => fn(1)(2)(3)(4)()这样类似的柯里化转化?可以详细解释一下吗?
// 柯里化 wrapper
var currying = function(fn){
var args = [];
return function(){
if(!!arguments.length) {
[].push.apply(args, arguments);
return arguments.callee;
} else {
return fn.apply(this, args);
}
}
}
// 累加
var sum = (function(num){
var ret = 0;
return function(){
for(var i = 0, len = arguments.length; i < len; i++) {
ret += arguments[i];
}
return ret;
}
})();
var newSum = currying(sum);
newSum(1)(2)(3)(4)() // 10、
// 查询数组中是否存在某个值
var find = function(arr, el){
return arr.indexOf(el) !== -1;
}
var newFind = currying(find)(arr);
newFind(1);
newFind(2);