这个属性的值在nodeJS上没有定义

我还在学习JavaScript,当我试图理解this行为时,我有点困惑。 有一件事我明白this关键字实际上指的是函数调用的地方在哪里。 我试图运行下面的示例代码:

 function foo() { console.log ( this.a ); } var a = 2; foo(); 

预期的结果是2.它在Chrome的控制台上显示2 ,但是当我试图从NodeJS运行它时,结果结果将是undefined 。 我的节点版本是6.10.1

在Node中运行的代码与浏览器的控制台比较时,调用站点会有所不同,或者当我在nodeJS上运行代码时,特别是在使用this关键字时是否有什么需要我担心?

在浏览器中你的全局对象是Window,“this”是指窗口对象。 在此执行上下文中创build的每个variables都附加到Window对象。
在NodeJS中,每个在特定执行上下文之外定义的variables都附加到“模块”上下文,该上下文被视为您正在处理的文件,而不是节点使用的全局对象。

因此,在浏览器中调用您的函数的对象是Window对象,而在节点中是Global对象。 在浏览器中,variables“a”被附加到Windows对象,“this”指向它。 在节点“a”附加到为导出文件而创build的模块,但“this”指向Global对象。

检查这个答案

这是因为非严格模式下的默认值是window

当你在函数外部定义任何variables时,它也成为window一部分。

样品

 function foo() { console.log(this.a); console.log(window.a); } var a = 2; foo();