如上所述:
http://jqfundamentals.com/book/index.html
闭包还可用于解决this关键字的问题,该关键字对每个范围都是唯一的.在处理回调时,此机制特别有用,但在这些情况下,通常最好使用Function.bind,这将避免与范围遍历相关的任何开销.
但它并没有真正说明如何区分这两种情况.实际上我并不理解作者的意思是"避免与范围遍历相关的任何开销".你可以解释吗?
Pan*_*lis 10
请看上面链接示例中的这一行
console.log(self.myName, this.myName);
Run Code Online (Sandbox Code Playgroud)
(用self = this;上面几行).闭包定义了outerFunction方法,它存在于不同的范围内,这就是为什么它与outerObj对象具有不同的值.(self.myName!= this.myName)
范围遍历意味着,当您要获取存在于不同范围内的值(变量,对象)时,会增加额外开销(代码执行速度变慢).
使用bind,您将调用具有现有范围的函数,因此不会进行范围遍历.
它所指的是这样的事情
obj.doSomething = function() {
var that = this;
setTimeout(function() {
// this is the window
// that is the obj
that.doSomethingElse();
}, 50);
};
Run Code Online (Sandbox Code Playgroud)
VS
obj.doSomething = function() {
setTimeout((function() {
// this is the obj
this.doSomethingElse();
}).bind(this), 50);
};
Run Code Online (Sandbox Code Playgroud)
基准.铬没有明显的区别.
| 归档时间: |
|
| 查看次数: |
10944 次 |
| 最近记录: |