Node.js和JavaScript解释器是否不同?

4
在下面的代码中,使用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,我得到了以下输出:未定义

我很困惑,是Node.js使用与JavaScript不同的解释器吗?

2个回答

4
在浏览器中,顶级作用域是全局作用域。这意味着在浏览器中,如果您在全局作用域中使用var something,它将定义一个全局变量。
因此,在全局作用域中运行var name = "The Window";window.name = "The window";是相同的。
然而,在Node中情况就不同了。顶级作用域不是全局作用域;在Node模块内部使用var something将会是该模块内部的局部变量。
这就是为什么您无法在nodejs中获取name的原因。

你的意思是内部函数(返回this.name)的作用域是“全局”的,而不是“顶层”的吗? - mikalai
明白了 - 因为该模块被另一个函数包装,所以“顶层”是闭包作用域。 - mikalai
根据我的理解,名称和函数在同一个模块中,因为它们在同一个文件中。 - zolibra

0

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

在 Node 中,如果您在 Node 控制台中运行它,则会看到 'The Window',如果您使用命令 >node xxx.js 运行脚本,则会看到 undefined


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接