我从朋友那里看到了这段代码,我想知道为什么会这样。
假设有两个文件:scope2.js 和 scope3.js
scope2.js
console.log(foo);
var foo=6;
woo=5;
(function()
{
console.log(foo);
console.log(woo);
var foo=5;
console.log(foo);
console.log(woo);
})();
在 NodeJS 环境中执行时的输出,>>> "node scope2.js"
未定义 未定义 5 5 5
现在,Scope3.js
console.log(foo);
var foo=6;
woo=5;
(function()
{
console.log(foo);
console.log(woo);
var foo=5;
var woo=6;
console.log(foo);
console.log(woo);
})();
以上代码在 nodejs env 中的输出是:
未定义 未定义 未定义 5 6
为什么会有这种行为?
我了解 JS 中变量作用域的大部分基础知识,但这让我感到困惑,我不想理解一些带有错误假设的东西。