4

对于下面的代码,在 Javascript 中我得到了输出:窗口

var name = "The Window";
var object = {
   name : "My Object",
       getNameFunc : function(){
         return function(){
           return this.name;
         };
       }
     };
console.log(object.getNameFunc()());

但是对于 Node.js,我得到以下输出:未定义

我很困惑,Node.js 是否将差异解释器与 javascript 一起使用?

4

2 回答 2

4

在浏览器中,顶级作用域是全局作用域。这意味着在浏览器中,如果您在全局范围 var 中,某些东西将定义一个全局变量。

所以在全局范围内,当你运行时var name = "The Window";,它与window.name = "The window";.

在 Node 中,这是不同的。顶级范围不是全局范围;var 节点模块中的某些内容将是该模块的本地内容。

这就是你无法进入namenodejs的原因。

于 2013-08-30T05:11:40.330 回答
0

this指向发出呼叫的所有者。在您的示例中,由于您使用了自执行功能object.getNameFunc()(),因此所有者是window浏览器中的对象。

在节点中,如果您在节点控制台中运行它,您将看到“窗口”,如果您使用命令运行脚本>node xxx.js,您将看到undefined.

于 2013-08-30T05:14:48.297 回答