这应该引用对象本身,但在下面的代码中,为什么它的行为不同?
var x = 4,
obj = {
x: 3,
bar: function() {
var x = 2;
setTimeout(function() {
var x = 1;
alert(this.x);
}, 1000);
}
};
obj.bar();
为什么警报是 4
而不是 3
?
内部 setTimeout
回调 this
引用窗口对象,因此它正在检索在全局上下文中定义的变量。
您可以通过使用 Function#bind
绑定(bind) this 上下文来使其工作 方法。
var x = 4,
obj = {
x: 3,
bar: function() {
var x = 2;
setTimeout(function() {
var x = 1;
alert(this.x);
}.bind(this), 1000);
}
};
obj.bar();
或者使用局部变量来缓存对 this
的引用并在回调函数中使用它。
var x = 4,
obj = {
x: 3,
bar: function() {
var x = 2,
that = this;
setTimeout(function() {
var x = 1;
alert(that.x);
}, 1000);
}
};
obj.bar();
另请参阅 MDN 文档:The "this" problem