阅读完mozilla 文档后,我发现了这一点:
在全局执行上下文中(在任何函数之外), this 指的是全局对象,无论是否处于严格模式。
在玩了一会儿范围之后,我发现在 node.js REPL 中......
> this === global
true
但是当我用同一行创建脚本时......
$ cat > script.js
console.log(this === global)
$ node script.js
false
是否有一个原因?或者这是一个错误?
阅读完mozilla 文档后,我发现了这一点:
在全局执行上下文中(在任何函数之外), this 指的是全局对象,无论是否处于严格模式。
在玩了一会儿范围之后,我发现在 node.js REPL 中......
> this === global
true
但是当我用同一行创建脚本时......
$ cat > script.js
console.log(this === global)
$ node script.js
false
是否有一个原因?或者这是一个错误?
节点REPL
是全球性的。文件中的代码位于“module”中,它实际上只是一个函数。
你的代码文件变成了这样一个非常简单的例子:
var ctx = {};
(function(exports) {
// your code
console.log(this === global);
}).call(ctx, ctx);
请注意,它是使用 执行的.call()
,并且该this
值被设置为一个预定义的对象。
当您使用 node 从文件运行脚本时,它会隐式地将其设置为具有自己作用域的module。
当您在没有文件的情况下直接运行它时,您将被放入 REPL 但不在任何module范围内。