对于下面的代码,在Javascript中我得到了输出: The Window
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
console.log(object.getNameFunc()());
但是对于Node.js,我得到了以下输出:undefined
我很困惑,Node.js是否使用差异解释器和javascript?
答案 0 :(得分:4)
在浏览器中,顶级范围是全局范围。这意味着 在浏览器中,如果你在全局范围内var会定义一个 全局变量。
因此,在全局范围内,当您运行var name = "The Window";
时,它与window.name = "The window";
相同。
在Node中,这是不同的。顶级范围不是全球性的 范围; Node模块内部的var内容将是本地的 模块。
这就是你无法在nodejs中获得name
的原因。
答案 1 :(得分:0)
this
指向拨打电话的所有者。在您的示例中,由于您使用了自执行函数object.getNameFunc()()
,因此所有者是浏览器中的window
对象。
在节点中,如果在节点控制台中运行它,您将看到“窗口”,如果使用命令>node xxx.js
运行脚本,您将看到undefined
。