我刚刚this在NodeJS环境中看到了关键字的奇怪行为.我用代码列出它们.我NodeJS v6.x用一个JavaScript文件运行这些代码.
在使用以下一行代码进行测试时,无论是否使用该'use strict'语句,都指向一个空对象{}.
console.log(this)
Run Code Online (Sandbox Code Playgroud)
但是,当我在自执行函数中运行语句时,
(function(){
console.log(this);
}());
Run Code Online (Sandbox Code Playgroud)
它正在打印一个非常大的对象.在我看来环境创建的全局执行上下文对象NodeJS.
在使用'use strict'语句执行上述功能时,预计会打印undefined
(function(){
'use strict';
console.log(this);
}());
Run Code Online (Sandbox Code Playgroud)
但是,在使用浏览器(我只测试过Chrome)时,前三个示例产生window对象,最后一个示例undefined按预期方式给出.
浏览器的行为是可以理解的.但是,如果是NodeJS,它不会创建执行上下文,直到我在函数内部包装?
那么,大多数代码NodeJS运行时都是空的全局 object?
我有以下脚本:
/* script.js */
var bar = "bar1";
function foo() {
console.log('this.bar: ' + this.bar);
console.log('global.bar: ' + global.bar);
}
foo();
Run Code Online (Sandbox Code Playgroud)
运行node script.js回报:
this.bar: undefined
global.bar: undefined
Run Code Online (Sandbox Code Playgroud)
但是,从节点命令行环境内部,再现相同的脚本将返回:
this.bar: bar1
global.bar: bar1
Run Code Online (Sandbox Code Playgroud)
另外,如果我改变从我的变量声明var bar = "bar1";来global.bar = "bar1";运行上面的代码返回的两种方法:
this.bar: bar1
global.bar: bar1
Run Code Online (Sandbox Code Playgroud)
有什么不同?运行脚本与在同一环境中重现脚本时,全局变量赋值是否有所不同?