関数のスコープとブロックのスコープに関するこのサンプル コード スニペットを見つけましたが、それがどのように機能するかはわかりません。
(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 の値になるべきではありませんか?
ありがとう!