我还在学习 JavaScript,当我试图理解这个
行为时,我有点困惑。我了解的一件事是 this
关键字实际上是指函数调用时的调用站点在哪里。我试图运行下面的示例代码:
function foo() {
console.log ( this.a );
}
var a = 2;
foo();
预期结果是 2。它确实在 Chrome 控制台上显示了 2
,但是当我尝试从 NodeJS 运行它时,结果将是 undefined
。我的 Node 版本是 6.10.1
当在 Node 中运行的代码与浏览器的控制台相比,调用站点是否会有所不同,或者当我在 NodeJS 上运行代码时,特别是在使用 this
关键字时,有什么需要我关心的吗?
最佳答案
在浏览器中,你的全局对象是Window,“this”指的是窗口对象。在此执行上下文中创建的每个变量都附加到 Window 对象。
在 NodeJS 中,在特定执行上下文之外定义的每个变量都附加到“模块”上下文,该上下文被视为您正在处理的文件,而不是 Nodes 使用的全局对象。
因此,在浏览器中调用函数的对象是 Window 对象,在 Node 中是 Global 对象。 在浏览器中,变量“a”附加到 Windows 对象,“this”指向它。 在 Node 中,“a”附加到为导出文件而创建的模块,但“this”指向全局对象。
另请检查this answer
关于javascript - 'this' 属性的值在 nodeJS 上未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44450106/