【发布时间】:2014-08-16 03:49:06
【问题描述】:
我有以下脚本:
/* script.js */
var bar = "bar1";
function foo() {
console.log('this.bar: ' + this.bar);
console.log('global.bar: ' + global.bar);
}
foo();
运行node script.js 返回:
this.bar: undefined
global.bar: undefined
但是,从节点命令行环境内部,复制相同的脚本会返回:
this.bar: bar1
global.bar: bar1
此外,如果我将变量声明从var bar = "bar1"; 更改为global.bar = "bar1";,运行上述代码的两种方法都会返回:
this.bar: bar1
global.bar: bar1
有什么区别?在同一环境中运行脚本与复制脚本时,全局变量分配是否有所不同?
【问题讨论】:
-
以这种方式运行脚本基本上是在运行一个模块,而一个模块基本上只是你的代码在被
eval'd 和调用之前拼接到一个函数中,所以var是一个局部变量在那个函数中。 REPL 在全局执行上下文中运行。
标签: javascript node.js