Chrome 版本 49.0.2623.110 m。
Node.js 版本 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
节点提供
0
0
2
为什么会发生这种情况?
谢谢
Chrome 版本 49.0.2623.110 m。
Node.js 版本 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
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
所遮蔽。
b
是相同的,因为在模块中没有声明 b
来掩盖全局变量。 - Paul
window
)。尝试使用控制台记录“this”,就会变得清晰明了。 - adeneo