我还在学习JavaScript,当我试图理解this
行为时,我有点困惑。有一点我明白this
关键字实际上是指函数调用时调用的位置。我正在尝试运行下面的示例代码:
function foo() {
console.log ( this.a );
}
var a = 2;
foo();
预期结果为2.它确实在Chrome控制台上显示2
,但当我尝试从NodeJS运行时,结果结果为undefined
。我的节点版本是6.10.1
当Node中运行的代码与浏览器控制台比较时,调用站点是否会有所不同,或者当我在nodeJS上运行代码时,是否有任何需要我关注的问题,尤其是在使用this
关键字时?
答案 0 :(得分:1)
这是因为非严格模式下this
的默认值为window
此外,当您在函数外部定义任何变量时,它将成为window
的一部分。
<强>示例强>
function foo() {
console.log(this.a);
console.log(window.a);
}
var a = 2;
foo();
&#13;
但是如果您在严格模式下尝试相同(在节点控制台中),则默认值this
未定义。因此,当您尝试访问this.a
<强>示例强>
"use strict";
function foo() {
console.log(this.a);
}
var a = 2;
foo();
&#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