有人可以解释为什么当我们使用bind而不是应用时这不能正常工作。
假设我有一个简单的功能:
function addFourNumbers(a,b,c,d){
return a+b+c+d;
}
我尝试创建一个函数,我以后可以使用正确的'this'值来调用上面的函数,并且可以随时传递参数:
function bind(fn, thisArg){
var outArg = [].slice.call(arguments, 2);
return function(){
var inArg = [].slice.call(arguments);
var allArg = outArg.concat(inArg);
return fn.apply(thisArg, allArg);
}
}
现在,当我拨打以下电话时,它可以工作:
var t = bind(addFourNumbers,this,1)
t(2,3,4); //output 10
var t = bind(addFourNumbers,this,1,2)
t(3,4); //output 10
如果我将apply更改为bind
,现在我很困惑function bind(fn, thisArg){
var outArg = [].slice.call(arguments, 2);
return function(){
var inArg = [].slice.call(arguments);
var allArg = outArg.concat(inArg);
return fn.bind(thisArg, allArg);
}
}
并尝试执行:
var t = bind(addFourNumbers,this,1,2)
t(3,4)(); //output 1,2,3,4undefinedundefinedundefined
有什么建议吗?
由于