JavaScript 柯里化函数疑惑
下面的柯里化函数不太理解,为什么可以实现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);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)