Con*_*yen 5 javascript browser node.js
我已经尝试在firefox和node.js中使用代码
var x = 10;
var o = { x: 15 };
function f(){
console.log(this.x);
}
f();
f.call(o);
Run Code Online (Sandbox Code Playgroud)
浏览器中的结果是10,15,但node.js中的结果是未定义的,15.
请向我解释一下在浏览器和node.js中"this"关键字的不同行为是什么?我读了很多页但没有任何明显的答案.提前致谢.
Nodejs中加载的Javascript文件自动包装在匿名函数中.
所以在Node中你真正运行的是:
(function(/* There are args here, but they aren't important for this answer */){
var x = 10;
var o = { x: 15 };
function f(){
console.log(this.x);
}
f();
f.call(o);
})();
Run Code Online (Sandbox Code Playgroud)
浏览器不会这样做.问题是,现在Node x中只是函数范围内的正常变量,它不是全局范围的一部分.当你调用f()这个方法,this内f是全局范围.
如果直接放在x全局范围内,它将在两种情况下都有效.
this.x = 10;
Run Code Online (Sandbox Code Playgroud)
这将放置x在上window浏览器全局对象,并global在节点全局对象.
通常,您不会在Node中全局加载内容,而是将代码分组到模块中,如此处所述.有关于您可以在此处访问的各种全球事物的信息.如果你对包装器很好奇,你可以在这里看到它.