Javascript,如何将闭包中的返回函数与外部函数连接起来

时间:2015-03-07 02:06:55

标签: javascript closures

function func() {
  return this == myObject;
}

var boundFunc = func.bind(myObject, "arg1", "arg2");
boundFunc("arg3", "arg4");

Function.prototype.bind = function() {
  var fn = this;
  var args = Array.prototype.slice.call(arguments);
  var object = args.shift();

  return function() {

    var allArgs = args.concat(Array.prototype.slice.call(arguments))
    return fn.apply(object, allArgs);
  };

}

我需要一些上述代码段的帮助。我认为除了一件事我理解它。

我不明白这是怎么回事:

return function() {

  var allArgs = args.concat(Array.prototype.slice.call(arguments))
  return fn.apply(object, allArgs);
};

指的是:

boundFunc("arg3", "arg4");

我知道当调用bind时args获取参数(myObject,arg1,arg2)。但我不明白return function()如何引用boundfunc以便将arg3arg4args连接起来。那有意义吗?有人可以帮我解释一下这个问题吗?

1 个答案:

答案 0 :(得分:0)

如果您反汇编代码会发生这种情况:

var boundFunc = function() {
    var allArgs = ["arg1", "arg2"].concat([].slice.call(arguments))
    return func.apply(myObject, allArgs);
};

保留.bind()中的参数,并返回一个代理函数,它将使用前面的参数和在调用中传递的新参数的组合调用func