Javascript 为什么节点打印未定义而浏览器不打印';T

Javascript 为什么节点打印未定义而浏览器不打印';T,javascript,node.js,Javascript,Node.js,在节点中运行此代码时,函数foo将打印undefined。但是如果我在Chrome或Firefox控制台中运行相同的代码,我会得到正确的输出(oops,global)。有人能澄清原因吗 函数foo(){ console.log(this.a); } 函数doFoo(fn){ //fn只是对foo的另一种说法` fn();//在浏览器中,全局变量成为窗口对象的属性。当在没有上下文的情况下调用函数时,上下文也默认为窗口对象。因为您正在调用foo()在不提供上下文的情况下,this.a被视为窗口。a

在节点中运行此代码时,函数foo将打印
undefined
。但是如果我在Chrome或Firefox控制台中运行相同的代码,我会得到正确的输出(
oops,global
)。有人能澄清原因吗

函数foo(){
console.log(this.a);
}
函数doFoo(fn){
//fn只是对foo的另一种说法`

fn();//在浏览器中,全局变量成为
窗口
对象的属性。当在没有上下文的情况下调用函数时,上下文也默认为
窗口
对象。因为您正在调用
foo()
在不提供上下文的情况下,
this.a
被视为
窗口。a
,它是全局变量


Node.js有一个名为
global
的全局对象,但全局变量不是该对象的属性。请参见。
这一点。a
被视为
global.a
,但这是未定义的,因为变量声明没有分配给它。

是关于返回什么,或者由
console.log()打印什么的问题
?在浏览器的全局作用域中,
var a=…
类似于
window.a=…
-而foo中的这是window