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

时间:2017-06-09 05:45:19

标签: javascript node.js

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

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

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

当Node中运行的代码与浏览器控制台比较时,调用站点是否会有所不同,或者当我在nodeJS上运行代码时,是否有任何需要我关注的问题,尤其是在使用this关键字时?

2 个答案:

答案 0 :(得分:1)

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

此外,当您在函数外部定义任何变量时,它将成为window的一部分。

<强>示例

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

但是如果您在严格模式下尝试相同(在节点控制台中),则默认值this未定义。因此,当您尝试访问this.a

时,它会抛出错误

<强>示例

&#13;
&#13;
"use strict";
function foo() {
  console.log(this.a);
}
var a = 2;
foo();
&#13;
&#13;
&#13;

答案 1 :(得分:1)

在浏览器中,您的全局对象是窗口,&#34;这个&#34;是指窗口对象。在此执行上下文中创建的每个变量都附加到Window对象 在NodeJS中,在特定执行上下文之外定义的每个变量都附加到&#34;模块&#34;上下文被视为您正在处理的文件而不是Nodes使用的全局对象。

因此,在浏览器中调用函数的对象是Window对象,而节点中的对象是Global对象。 在浏览器中,您的变量是&#39; a&#39;附加到Windows对象和&#39;这个&#39;指向它。 在Node&#39; a&#39;附加到为导出文件而创建的模块,但是这个&#39;指向Global对象。

同时检查this answer