我的代码使用柯里化(Currying)来获取连接两个数组的数组的平均值:一个 n 大小的数组和一个 m 大小的数组。
var avg = function(...n){
let tot=0;
for(let i=0; i<n.length; i++){
tot += n[i];
}
return tot/n.length;
};
var spiceUp = function(fn, ...n){
return function(...m){
return fn.apply(this, n.concat(m));
}
};
var doAvg = spiceUp(avg, 1,2,3);
console.log(doAvg(4,5,6));
在return fn.apply(this, n.concat(m));
这一行,我不明白为什么我们需要使用apply
。我们与平均函数绑定(bind)的对象是什么?为什么正常调用 (return fn(n.concat(m));
) 不起作用?
最佳答案
在那个例子中,this
并不是那么重要。如果您改为传递一个空对象,它也会起作用。这只是一个关于如何使用 apply 的示例。
你需要关注的是第二个参数n.concat(m)
。他们这里的关键概念是将数组作为第二个参数传递,您调用该函数 (fn
) 将数组中的每个值作为参数传递。
关于你的第二个问题:不,它不会工作,因为 fn
在执行 return fn(n.concat(m ));
你只是传递一个参数,一个包含所有值的数组
也许你会通过一个更简单的例子更好地理解它:
function sum3params(a,b,c){
return a+b+c;
}
console.log(sum3params([3,4,2])) // won't work
console.log(sum3params.apply(this, [3,4,2])) // will work ('this' is not important here)
关于javascript - 如何使用柯里化(Currying)应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42303841/