1

関数のスコープとブロックのスコープに関するこのサンプル コード スニペットを見つけましたが、それがどのように機能するかはわかりません。

(function () {
  if (true) {
    var x = true;
    console.log("Is 'x' available inside the block? " + x);
  }
  console.log("Is 'x' available outside the block? " + x);
})();

最初は、条件式は宣言された変数 x の値が true であるかどうかをチェックしていて、変数ホイストの b/c は、条件式を「if(x ==真)」。

ただし、x = false になるように x の値を変更すると、条件付きのコード ブロックが引き続き実行され、両方のコンソール ログが x の値を「false」としてトリガーされます。条件文の外にあるコンソールログだけを実行するべきではないでしょうか?

x=true の場合、条件を「if(false)」に変更すると、条件の外側のコンソール ログのみが実行されますが、x の値は未定義です。変数に機能スコープがあり、それが巻き上げられている場合、外部コンソール ログが実行され、x=false の値になるべきではありませんか?

ありがとう!

4

2 に答える 2