绑定并应用返回不同的结果

时间:2018-04-18 04:37:50

标签: javascript

有人可以解释为什么当我们使用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

有什么建议吗?

由于

0 个答案:

没有答案