将上下文传递给 setTimeout 回调
将正确的上下文传递给 setTimeout 回调可能具有挑战性,尤其是在使用对象方法时。最初,在回调中引用 this 时,通常会导致使用全局对象。
要解决此问题,有几种方法:
1.存储引用(ES5 及更早版本):
var that = this; if (this.options.destroyOnHide) { setTimeout(function() { that.tip.destroy() }, 1000); }
此技术使用临时变量来保存调用 setTimeout 的上下文。
2 。绑定方法(ES5 及更高版本):
if (this.options.destroyOnHide) { setTimeout(function() { this.tip.destroy() }.bind(this), 1000); }
bind 方法使用预定义的 this 值创建一个新函数。在本例中,this 在调用 setTimeout 之前设置为对象。
3。箭头函数(ES6 及更高版本):
if (this.options.destroyOnHide) { setTimeout(() => { this.tip.destroy() }, 1000); }
箭头函数继承其词法 this 上下文,与调用 setTimeout 的对象相同。这样就无需绑定或存储它。
4。向 setTimeout 传递参数 (HTML5):
if (this.options.destroyOnHide) { setTimeout(function(that) { that.tip.destroy() }, 1000, this); }
HTML5 在 setTimeout 中引入了一项功能,允许向回调传递其他参数。在这里,它作为参数传递并在回调函数中访问。
以上是如何正确地将上下文传递给'setTimeout”回调?的详细内容。更多信息请关注PHP中文网其他相关文章!