javascript - 'this' 属性的值在 nodeJS 上未定义

标签 javascript node.js

我还在学习 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/

相关文章:

javascript - 使 IFrame 动态调整大小

javascript - 避免循环内循环

node.js - node-postgres UTF 密码错误

JavaScript/Node.JS - 使用 OR 运算符的紧凑方式?

javascript - iframe 以外的 javascript 变量名冲突的解决方案?

javascript - 将 2 个数组参数传递给 wasm

javascript - 在我的文本框中,当我输入 123 并编辑为 1-23 时,我需要触发单独的 api 调用

node.js - IBM Cloudant 的聚合查询,基本上是 couchDB

javascript - 尝试发送 POST 请求时收到 404 错误

javascript - 535使用nodemailer的错误身份验证错误