这个绑定函数…这些参数,还有这个apply方法.我不确定我理解这在这个例子中是如何工作的
This Bind Function... and these arguments, and this apply method... I'm not sure I understand how this is working in this example
摘自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参数并获取长度属性。但是从最里面的函数,参数。
为了简化,暂时不考虑闭包。
函数bind
返回如下函数:
function returnedFunction() {
return context[name].apply(context, arguments);
}
如果我调用returnedFunction(1,2,3);
,参数是1, 2, 3
。如果我调用returnedFunction()
,则没有参数。
现在我们要担心的是context
和name
,它们在简化后就是undefined
,当你看到闭包时,会发现它们是在外部函数中定义的。
arguments
和this
不是变量,所以它们不能被关闭。对每个函数调用分别求值。对于传递给bind
的任何参数,它们都会为bind
求值,然后每次调用returnedFunction
时,它们都会为returnedFunction
求值。
注意从bind
返回的函数彼此之间没有关系。它们都有自己独特的环境,具有不同的context
和name
绑定。
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- ajaxToolkit PopupControlExtender不工作.过时的
- HTML标记在脚本标记中工作
- 在JavaScript中的类中,push和concat的工作方式有何不同