4

私は友人からこのコードに出くわしました.なぜこれがこのように機能しているのか疑問に思っています.

scope2.js と scope3.js の 2 つのファイルを想定します。

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 envで実行した場合の出力 >>> 「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の変数スコープの基本のほとんどを理解していますが、これは私を混乱させます.いくつかの悪い仮定で何かを理解したくありません.

4

1 に答える 1