我在本地安装了 Node.js v8.10.0。我写了一个简单的脚本来玩“这个”:
var x = 1;
var fn = function (a) {
var x = a;
console.log(`local x = ${x}`);
console.log(`global x = ${this.x}`);
}
fn(10);
当我通过 Node.js 执行脚本时,我得到以下结果:
local x = 10
global x = undefined
当我在 Chrome 中执行脚本时,我得到以下结果:
local x = 10
global x = 1
你能给我解释一下,为什么 Node.js 在全局范围内看不到 x 吗?
最佳答案
Could you please explain to me, why Node.js doesn't see x in global scope?
如果您在 Node 控制台中运行它,它确实如此。如果将其作为文件运行,x
位于文件范围,而不是全局范围。
顺便说一句,在 Node 中,您可以使用 global
来显式查看全局范围,就像您在浏览器中使用 window
一样。因此,
console.log(global == this)
将根据您是在文件中还是在控制台中运行它,给您两个不同的答案。
此外,尝试迁移到 let
和 const
。这更加令人困惑,因为 var
在全局范围和其他地方的行为不同。在控制台和浏览器中,您的外部 var x
处于全局范围内,因此它定义了一个全局变量(window.x
和 global.x
).在 Node 文件中,var x
不在全局范围内,因此它执行不在全局范围内时通常执行的操作:定义一个 local 变量 x
(不是 this.x
,不是 global.x
,只是 x
)。因此,您有两个局部变量,内部变量覆盖外部变量,这使得外部变量不可访问。同时,this.x
从未被定义。
关于javascript - Node.js 和浏览器对 'this' 的不同处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51493454/