阅读mozilla文档后,我发现了这一点:在全局执行上下文中(在任何函数之外),这是指全局对象,无论是否处于严格模式下。在玩了一点示波器之后,我发现在node.js REPL中...> this === globaltrue但是当我用同一行创建脚本时...$ cat > script.jsconsole.log(this === global)$ node script.jsfalse是否有一个原因?还是一个错误?
3 回答
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
节点REPL是全局的。文件中的代码位于“模块”中,它实际上只是一个函数。
您的代码文件变成了如下所示的简化示例:
var ctx = {};
(function(exports) {
// your code
console.log(this === global);
}).call(ctx, ctx);
请注意,它是使用来执行的.call(),并且该this值已设置为预定义的对象。
有只小跳蛙
TA贡献1824条经验 获得超8个赞
因为this
脚本中没有引用模块的作用域(即,模块执行的上下文的变量绑定对象)。例如,var x = 42; console.log(this.x);
登录undefined
脚本。我没有立即发现任何内容说明this
模块中的内容(它记录为空对象),也没有发现REPL使用来评估您的代码this = global
。
添加回答
举报
0/150
提交
取消