Node.js和javascript解释器不同?
对于下面的代码,我在Javascript中得到了输出:窗口 但是对于Node.js,我得到了以下输出:未定义 我很困惑,Node.js是否使用javascript的差异解释器 在浏览器中,顶级作用域是全局作用域。也就是说 在浏览器中,如果您在全局范围var中,则会定义 全局变量 因此,在全局范围内,当您运行Node.js和javascript解释器不同?,javascript,node.js,Javascript,Node.js,对于下面的代码,我在Javascript中得到了输出:窗口 但是对于Node.js,我得到了以下输出:未定义 我很困惑,Node.js是否使用javascript的差异解释器 在浏览器中,顶级作用域是全局作用域。也就是说 在浏览器中,如果您在全局范围var中,则会定义 全局变量 因此,在全局范围内,当您运行var name=“窗口”,与window.name=“该窗口”相同 在节点中,这是不同的。顶级范围不是全局范围 范围节点模块中的某个变量将是该模块的本地变量 模块 这就是您无法在nodejs
var name=“窗口”
,与window.name=“该窗口”相同代码>
在节点中,这是不同的。顶级范围不是全局范围
范围节点模块中的某个变量将是该模块的本地变量
模块
这就是您无法在nodejs中获取名称的原因。此
指向发出呼叫的所有者。在您的示例中,由于使用了自执行函数object.getNameFunc()()
,因此所有者是浏览器中的窗口
对象
在node中,如果您在节点控制台中运行它,您将看到“窗口”,如果您使用命令>node xxx.js运行脚本,您将看到未定义的您的意思是内部函数(返回此.name)的作用域是“全局的”,而不是“顶级的”?理解为模块是用另一个函数包装的,“top-level”是闭包作用域。根据我的理解,名称和函数在同一个模块中,因为它们在同一个文件中。
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
console.log(object.getNameFunc()());