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