gpt4 book ai didi

javascript - 在 Node.js 的 setTimeout() 回调中绑定(bind) `this`

转载 作者:搜寻专家 更新时间:2023-10-31 22:49:50 25 4
gpt4 key购买 nike

在 Node.js 中,在传递给 setTimeout() 的回调中,this 似乎绑定(bind)到 返回的 timeoutObject >setTimeout() 本身(在严格模式和非严格模式下!):

var timeoutObject = setTimeout(function () {
console.log(this === timeoutObject); // true
}, 0);

var timeoutObject = setTimeout(function () {
'use strict';
console.log(this === timeoutObject); // true
}, 0);

在浏览器中情况并非如此,this 绑定(bind)(如我所料)到全局对象 window(或者 undefined,在严格模式下)。

文档没有说明任何关于这种非标准行为的内容。

这是为什么?

最佳答案

Nodejs 不是浏览器。您所说的“标准”是针对浏览器的。阅读文档:

https://html.spec.whatwg.org/multipage/webappapis.html#dom-windowtimers-settimeout

要实现这两个计时函数,“this”应该绑定(bind)到 window 对象(在 Nodejs 中不可用)或 worker 对象(在 nodejs 中不可用)。

Nodejs 有它自己的全局对象,在这种情况下这可能是很好的目标,但我认为最好将 this 绑定(bind)到这个函数,而不是某个全局对象。似乎 Nodejs 的开发人员也是这么想的。

这并不违反“标准”,因为标准与此类环境无关,其中不存在窗口、导航和位置对象。

关于javascript - 在 Node.js 的 setTimeout() 回调中绑定(bind) `this`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34968517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com