阅读mozilla docs后,我发现了这个:
在全局执行上下文中(在任何函数之外),这指的是全局对象,无论是否处于严格模式。
在播放了一些示波器后,我在node.js中发现了REPL ...
> this === global
true
但是当我创建一个具有相同行的脚本时......
$ cat > script.js
console.log(this === global)
$ node script.js
false
这有什么理由吗?或者这是一个错误?
答案 0 :(得分:10)
节点的REPL
是全局的。文件中的代码位于“模块”中,这实际上只是一个函数。
您的代码文件变成了这个非常简化的示例:
var ctx = {};
(function(exports) {
// your code
console.log(this === global);
}).call(ctx, ctx);
请注意,它是使用.call()
执行的,this
值设置为预定义的对象。
答案 1 :(得分:0)
当您使用node从文件运行脚本时,它会隐式将其设置为具有自己范围的模块。
如果您只是在没有文件的情况下运行它,那么您将被放入REPL但不会放入任何模块范围。