Javascript 此节点上的变量作用域返回node.js中未定义的值
为什么在Google Chrome中,如果我打开控制台并输入以下逻辑Javascript 此节点上的变量作用域返回node.js中未定义的值,javascript,node.js,Javascript,Node.js,为什么在Google Chrome中,如果我打开控制台并输入以下逻辑 function foo() { console.log( this.bar ); } var bar = "global"; foo(); …调用foo()的结果是我得到了“global” 但如果我将相同的逻辑放入Visual Studio代码中名为app.js的文件中,并从终端运行节点app.js,我将在浏览器中获得未定义的? function foo() { console.log( this.bar
function foo() {
console.log( this.bar );
}
var bar = "global";
foo();
…调用foo()的结果是我得到了“global”
但如果我将相同的逻辑放入Visual Studio代码中名为app.js的文件中,并从终端运行节点app.js
,我将在浏览器中获得未定义的?
function foo() {
console.log( this.bar ); //"this" point to "window" it equals to: console.log(window.bar)
}
var bar = "global";
foo();
在Node.js中
function foo() {
console.log( this.bar );
}
bar = "global"; //implicit declaration variable will be global object's property
foo();
Node.js不创建隐式全局。此外@SLaks还说:浏览器控制台是独特的环境,有很多细微差别:如果你想确保某些东西按预期工作,请将你的js放入
标记中并运行.ahhh-如果我在我的理解中试图从整体上避免隐式全局,这可能是一件好事JavaScript。感谢node.js提供预防措施!您应该始终使用“使用严格”
在浏览器中,全局窗口
对象是此
的默认上下文。