JavaScript全局对象与窗口对象的区别

3

给定以下代码片段。

var name = 'John';
function foo() {
  console.log(this.name);
}

foo();

当我在浏览器中运行此代码时,日志输出名称,但当我在node中运行相同的代码片段时,它输出undefined是为什么?
在浏览器中,this指的是window对象,全局变量将附加到window上。现在在node中,this将在此示例中引用全局对象,所以我的全局变量是否不像在浏览器中附加到窗口时那样附加到全局对象?

可能是在nodejs模块中,"this"是什么意思?的重复问题。 - jmargolisvt
当我在Node中运行它时,输出为John - Ted Hopp
这可能是一个版本问题吗?这是我的节点版本v7.7.4。 - Chaim Friedman
我不太清楚版本控制的情况。我在Mac上运行v8.4.0,但我也在另一台机器上的node v6.9.1上运行了你的代码。你是在普通的node会话中运行代码还是在模块内部进行某些操作? - Ted Hopp
2个回答

4
Node.js中的global与浏览器中的全局作用域有所不同。请参阅global的定义以了解更多信息:
在浏览器中,顶级作用域是全局作用域。这意味着在浏览器中,var something将定义一个新的全局变量。但在Node.js中情况不同。顶级作用域不是全局作用域;在Node.js模块内部使用var something将局限于该模块。
这个问题也可能会有所帮助:Node.js模块和函数中“this”的含义

-2

不应使用它,因为它引用了全局范围对象。在浏览器中,它是文档对象。如果想要访问变量,只需写出其名称即可。使用运算符 . 可以访问对象的属性。


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