取自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。
答案 0 :(得分:2)
暂时关闭关闭以简化。
函数bind
返回如下函数:
function returnedFunction() {
return context[name].apply(context, arguments);
}
因此,如果我调用returnedFunction(1,2,3);
,则参数为1, 2, 3
。如果我致电returnedFunction()
,则没有参数。
现在我们不得不担心context
和name
在简化中会是undefined
,当你查看闭包并看到它们是在外部函数中定义时。 / p>
arguments
和this
不是变量,因此无法关闭它们。它们分别针对每个函数调用进行评估。对于您传递给bind
的任何参数,对bind
进行评估,然后在每次调用returnedFunction
时对其returnedFunction
进行评估。
请注意,bind
返回的函数彼此无关。它们每个都有自己独特的环境,具有不同的context
和name
绑定。