スキャンチェーンコンセプト整理


コードキャンプの授業で、スコップチェインに関するJSの授業がありました.
ホイスティンとスコフチェーンについての概念は以前は知っていましたが、もっと正確にしたいと思って、もう一度勉強しました.
疑問のコードは以下の通りです.
 var a = 1;
    function outer() {
      function inner() {
        console.log("inner내부", a);
        var a = 3;
      }
      inner();
      console.log("outter내부", a);
    }
    outer();
    console.log("outer외부", a);
プロセス全体を見てみましょう.
1.最初のa=1は、最初にグローバルとして宣言される.
2.outer関数の実行に伴い、callスタックにスタックされます.
3.内部関数が失われるにつれて、callスタックに積み上げられます.
4.スタックの後入先出特性は、内部()から実行されます.
ここにいるよ!理解できない部分はすでに全域であり,aという変数には1が印刷されている.
なぜ内部aのコンソールにundefinedが表示されるのですか?1を表示しますか?私はそう思います.
よく考えてみるとjavascriptは変数を宣言する瞬間にエスケープを適用します.
JAvascriptはスキャン範囲内で必要な変数を検索し、そうでない場合は、自身を囲む親関数で宣言された変数をチェニンのように検索します.
しかし、内関数ではvara=3である.名前の変数が宣言されたため、最初はaの値が見つからなかったのでundefinedを出力し、vara=3という宣言をすぐに見つけたので、aの値は返さない!すでに自分の内関数にaの値に3の数字を加えているので、ECは発生しません!