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

标签 javascript node.js

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

相关文章:

java - 网络服务器的实现

javascript - FetchError : request to http://localhost:3000/api/projects failed, 原因 : connect ECONNREFUSED 127. 0.0.1 :3000 (Express/Next. Js)

javascript - Node.JS 中事件循环的可预测性如何

javascript - Node JS : Returning Data with Callback Function from API using http

javascript - 如何使用 puppeteer 确认警报弹出窗口

node.js - 更新模型实例

javascript - 在 jquery 的 $.get 回调函数中使用文件名

javascript - JavaScript 中的 "Variable"变量

javascript - 将变量和 DOM 元素分别传递给 jquery

javascript - 无法复制变量内的内容