首页 >web前端 >js教程 >如何正确地将上下文传递给'setTimeout”回调?

如何正确地将上下文传递给'setTimeout”回调?

Patricia Arquette
Patricia Arquette原创
2024-12-25 22:25:23329浏览

How Can I Correctly Pass Context to a `setTimeout` Callback?

将上下文传递给 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn