Node.js 全局对象

全局对象是最顶层的对象,在浏览器环境指的是 window 象,在 Node.js 指的是 global 对象。ES5 之中,全局对象的属性与全局变量(var)是等价的。

全局对象的属性赋值与全局变量(var)的赋值,是同一件事。(对于Node来说,这一条只对 REPL 环境适用,模块环境之中,全局变量必须显式声明成global对象的属性。

var a = 2;function foo(){console.log(this.a);}foo();

this指全局对象,在 repl 中this就是 repl 的上下文对象(global引用)
而在模块环境下,每个模块有各自的上下文对象,vm不会把各自上下文中的全局变量粘贴到global中。

而 `node *.js` 就是在模块环境(vm)中执行的

在于 Node.js 的 vm(内置模块,将代码运行在一个沙箱之内) 里面,顶级作用域下的 var 会把变量贴到 global 下面。而 REPL 使用了 vm。然后 `$ node` 进入的一个模式就是一个特定参数下面启动的一个 REPL。