一尘不染

REPL和脚本之间的“此”不同

javascript

阅读mozilla文档后,我发现了这一点:

在全局执行上下文中(在任何函数之外),这指的是全局对象,无论是否处于严格模式下。

在玩了一点示波器之后,我发现在node.js REPL中…

> this === global
true

但是当我用同一行创建脚本时…

$ cat > script.js
console.log(this === global)
$ node script.js
false

是否有一个原因?还是一个错误?


阅读 263

收藏
2020-05-01

共1个答案

一尘不染

节点REPL是全局的。文件中的代码位于“模块”中,它实际上只是一个函数。

您的代码文件变成了如下所示的简化示例:

var ctx = {};
(function(exports) {
    // your code
    console.log(this === global);
}).call(ctx, ctx);

请注意,它是使用来执行的.call(),并且该this值设置为预定义的对象。

2020-05-01