“this”关键字在 NodeJS 中未定义 [重复]

`this` keyword is undefined in NodeJS [duplicate]

提问人:Dinh Minh Luu 提问时间:6/30/2023 最后编辑:geeky01adarshDinh Minh Luu 更新时间:7/6/2023 访问量:93

问:

我无法理解 JavaScript 中的“this”关键字行为 (NodeJS - v16.19.1)。根据这个网站,全局执行上下文中的“this”关键字将引用全局对象:

// this is my entire index.js file, I run "node index.js"
// global scope
console.log(this === globalThis); // this should be true but it is false.
console.log(this); // undefined

在 WSL 2 (windows 10) 的 NodeJS (v16.19.1) 中运行它 对此有解释吗?谢谢!

javascript node.js 这个 全局

评论

1赞 evolutionxbox 6/30/2023
你在哪里运行它?我得到this === globalThis //true
0赞 Dawid 6/30/2023
我认为你应该与global进行比较,而不是globalthis
1赞 Quentin 6/30/2023
目前尚不清楚您正在运行的代码是在 REPL 上、在 CommonJS 模块中还是在 ECMAScript 模块中。上下文很重要。
0赞 Dinh Minh Luu 6/30/2023
我将“this”与“globalThis”和“global”进行了比较。我在 WSL 2 (windows 16.19.1) 中运行 NodeJS (v10)。
2赞 RickN 6/30/2023
在 CommonJS 或 ES 模块中,模块不在全局范围内,这与浏览器中的大多数脚本不同。这就是(已弃用)和存在的原因。globalglobalThis

答:

-1赞 geeky01adarsh 6/30/2023 #1

此行为是因为,当调用模块文件时,会合并到 GetThisBinding() 的返回值,该值返回 undefined。this

但是,如果您将在浏览器上运行相同的代码,那么它将返回 true。

评论

0赞 Bergi 6/30/2023
node.js 和浏览器都实现了相同的 ECMAScript ,为什么它们会返回任何不同的东西?GetThisBinding
0赞 geeky01adarsh 6/30/2023
@Bergi 在浏览器中,关键字从 中找到它的值,但是,ECMAScript 会为 。thisResolveThisBinding()global