如上所述:
http://jqfundamentals.com/book/index.html
闭包还可用于解决this关键字的问题, 这是每个范围的独特之处。这个 机制可能特别有用 在处理回调时,尽管在 那些情况下,使用起来往往更好 Function.bind,这将避免任何 与范围相关的开销 遍历。
但它并没有真正说明如何区分这两种情况。实际上我并不理解作者的意思是“避免与范围遍历相关的任何开销”。你能解释一下吗?
答案 0 :(得分:9)
请看上面链接中示例中的这一行
console.log(self.myName, this.myName);
(自我=这;上面几行)。闭包定义了outerFunction方法,它存在于不同的范围内,这就是为什么它与outerObj对象具有不同的值。 (self.myName!= this.myName)
范围遍历意味着,当您要获取存在于不同范围内的值(变量,对象)时,会增加额外开销(代码执行速度变慢)。
使用bind,您正在调用具有现有范围的函数,因此不会进行范围遍历。
答案 1 :(得分:7)
它指的是这样的事情
obj.doSomething = function() {
var that = this;
setTimeout(function() {
// this is the window
// that is the obj
that.doSomethingElse();
}, 50);
};
VS
obj.doSomething = function() {
setTimeout((function() {
// this is the obj
this.doSomethingElse();
}).bind(this), 50);
};
Benchmark。铬没有明显的区别。