一尘不染

Node.js:在模块范围内使用时,“ 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);

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

I am global
undefined

问题

为什么不返回:

I am global
I am global


阅读 255

收藏
2020-07-07

共1个答案

一尘不染

在Node模块内部,this从设计上讲是指模块的exports对象:

console.log(this === exports); // true

使console.log(this.foo)等于console.log(exports.foo)

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

由于exports.foo不存在,您得到了undefined

2020-07-07