YDKJS – 这个怎么样?

我从YDKJS复制了代码,作者期望输出是'oops global',但是当我在Node中运行这个时,我得到'undefined'。 为什么?

function foo() { console.log(this.a); } var obj = { a: 2, foo: foo }; var bar = obj.foo; // function reference/alias! var a = "oops, global"; // `a` also property on global object bar(); // "oops, global" 

以正常的方式在Node中运行代码时:

节点implicitLost.js

Node作为一个模块运行你的代码,而不是全局范围。 如果在全局范围内运行(例如,在浏览器中的<script>...</script>中),那么显示的代码只输出“oops,global”。 (当你从另一个脚本中require(...)你的代码时,Node也会这样做。)

你可以在全局范围内运行你的代码,使用Node的REPL(请注意<redirect):将它pipe道化为node而不是提供它作为参数。

节点<implicitLost.js

为什么重要:

当在模块中运行时,由于var a = "oops, globals"; 在模块范围内,只在该模块内定义; 它不会成为一个全球性的。 所以在foo中试图访问全局对象的this.a没有看到它。

以下是在全局范围内运行的代码:

 function foo() { console.log(this.a); } var obj = { a: 2, foo: foo }; var bar = obj.foo; // function reference/alias! var a = "oops, global"; // `a` also property on global object bar(); // "oops, global"