Chrome 版本 49.0.2623.110m
Node v5.10.0
这是我的代码:
var a = 0;
(function() {
this.a = 1;
this.b = 2;
console.log(a);
} )();
console.log(a);
console.log(b);
Chrome 给
1
1
2
Node 给出
0
0
2
为什么会这样?
谢谢
最佳答案
在没有上下文的情况下调用函数时(并且您在非严格模式下运行)this
默认为全局对象。
在浏览器中,源代码的顶层在全局上下文中运行,因此 this.a
,即 window.a
与 var a
相同在顶部的全局上下文中声明。正在分配 this.a = 1
与分配 a = 1
相同.
在 node.js 中,每个 JavaScript 文件都有自己的模块上下文,与全局上下文分开,所以 var a = 0;
没有创建全局,而您使用 this.a = 1;
创建的全局将被自己的模块隐藏 a
.
关于javascript - v8 中 node.js 和 chrome 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36408236/