Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ';这';属性在nodeJS上的值未定义_Javascript_Node.js - Fatal编程技术网

Javascript ';这';属性在nodeJS上的值未定义

Javascript ';这';属性在nodeJS上的值未定义,javascript,node.js,Javascript,Node.js,我还在学习JavaScript,当我试图理解这种行为时,我有点困惑。我理解的一点是,这个关键字实际上是指调用函数时函数的调用位置。我正在尝试运行下面的示例代码: function foo() { console.log ( this.a ); } var a = 2; foo(); 预期结果为2。它确实在Chrome的控制台上显示了2,但当我试图从NodeJS运行它时,结果是未定义。我的节点版本是6.10.1 与浏览器控制台相比,在节点中运行代码时,呼叫站点是否会有所不同?或者在节点上

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

function foo() {
    console.log ( this.a );
}
var a = 2;
foo();
预期结果为2。它确实在Chrome的控制台上显示了
2
,但当我试图从NodeJS运行它时,结果是
未定义。我的节点版本是
6.10.1


与浏览器控制台相比,在节点中运行代码时,呼叫站点是否会有所不同?或者在节点上运行代码时,特别是在使用
this
关键字时,是否有任何需要我关注的问题?

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

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

样本

函数foo(){
console.log(this.a);
控制台日志(window.a);
}
var a=2;

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

因此,在浏览器中调用函数的对象是窗口对象,而在节点中是全局对象。 在浏览器中,变量“a”附加到Windows对象,“this”指向该对象。 In节点“a”附加到为导出文件而创建的模块,但“this”指向全局对象


也检查一下@ponury kostek的可能重复项,我不确定,但我没有找到与我的问题相关的链接上的任何答案,为什么浏览器和NodeJS控制台之间的
行为不同。执行结果将有不同的值相互比较。nodeJS中的
window
是否有类似的值?也就是说,如果我想让
this
引用全局对象,那么既然NodeJS没有
窗口,该如何在NodeJS中实现呢?您不应该这样做。如果需要全局范围,请创建自己的对象并为其赋值。还要注意,将值泄漏到全局范围是一种不好的做法。