Node.js:在模块作用域中使用“this”运算符时,其上下文是什么?

rab*_*tco 4 javascript global-variables this node.js

代码

我编写以下代码并将其另存为 test.js:

var foo = 'I am local';
global.foo = 'I am global';

function print () {
     console.log(this.foo);
};

print(); 
console.log (this.foo); 
Run Code Online (Sandbox Code Playgroud)

然后我使用命令在终端中运行它node test.js,它返回:

I am global
undefined
Run Code Online (Sandbox Code Playgroud)

问题

为什么不返回:

I am global
I am global
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 5

在 Node 模块内部,this按设计引用模块的exports对象:

console.log(this === exports); // true
Run Code Online (Sandbox Code Playgroud)

制作console.log(this.foo)相当于console.log(exports.foo).

换句话说,既没有this引用全局对象,也没有局部变量神奇地成为 的属性exports

因为exports.foo不存在,所以你得到undefined.