Javascript 绑定和应用返回不同的结果

Javascript 绑定和应用返回不同的结果,javascript,Javascript,有人能解释一下为什么我们使用bind而不是apply时不能正常工作吗 假设我有一个简单的函数: function addFourNumbers(a,b,c,d){ return a+b+c+d; } 我尝试创建一个函数,稍后可以使用“this”的正确值调用上述函数,并且可以随时传递参数: function bind(fn, thisArg){ var outArg = [].slice.call(arguments, 2); return funct

有人能解释一下为什么我们使用bind而不是apply时不能正常工作吗

假设我有一个简单的函数:

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
现在我很困惑,如果我改变申请绑定

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
有什么建议吗


感谢

作为程序员提示的可能副本。向谷歌询问这个问题,或者只是阅读有关Apply和Bind的文档。你会更快得到你的答复。记住,在这里提问之前,你必须先做研究,以免浪费每个人的时间。