Javascript ';这';属性在nodeJS上的值未定义
我还在学习JavaScript,当我试图理解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 与浏览器控制台相比,在节点中运行代码时,呼叫站点是否会有所不同?或者在节点上
这种行为时,我有点困惑。我理解的一点是,这个
关键字实际上是指调用函数时函数的调用位置。我正在尝试运行下面的示例代码:
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中实现呢?您不应该这样做。如果需要全局范围,请创建自己的对象并为其赋值。还要注意,将值泄漏到全局范围是一种不好的做法。