这个绑定函数......和这些参数,以及这个应用方法......我不确定我是否理解这在这个例子中是如何工作的

时间:2013-03-22 15:27:39

标签: javascript

取自http://ejohn.org/apps/learn/#84

function bind(context, name){ 
  return function(){ 
    return context[name].apply(context, arguments); 
  }; 
} 

我真的想知道这是如何运作的。但是,如果从最里面的函数调用console.log参数,则此函数不起作用。那么它们怎么可能用在它们被调用的apply函数中呢?

换句话说:

function bind(context, name){ 
  console.log(arguments.length === 2, true);
  return function(){ 
    console.log(arguments.length === 0, true);
    return context[name].apply(context, arguments); 
  }; 
} 

你可以在外部函数中调用参数console.log并获取length属性。但是从最里面的函数,arguments.length === 0。

1 个答案:

答案 0 :(得分:2)

暂时关闭关闭以简化。

函数bind返回如下函数:

function returnedFunction() {
    return context[name].apply(context, arguments);
}

因此,如果我调用returnedFunction(1,2,3);,则参数为1, 2, 3。如果我致电returnedFunction(),则没有参数。

现在我们不得不担心contextname在简化中会是undefined,当你查看闭包并看到它们是在外部函数中定义时。 / p>

argumentsthis不是变量,因此无法关闭它们。它们分别针对每个函数调用进行评估。对于您传递给bind的任何参数,对bind进行评估,然后在每次调用returnedFunction时对其returnedFunction进行评估。

请注意,bind返回的函数彼此无关。它们每个都有自己独特的环境,具有不同的contextname绑定。