在 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/