私はいくつかのシナリオを練習していて、ケースを見つけました:
クロージャーバー関数によるとvar x
、アラート1と条件がfalseになると予想していましif(!1)
たが、アラートが発生しundefined
、条件がtrueになり、2番目のアラートの値は10になります。
var x = 1;
function bar() {
alert(x);
if (!x) {
var x = 10;
}
alert(x);
}
bar();
では、なぜ未定義のプロンプトが表示されるのか混乱していますか?
特定のスコープでの巻き上げによれば、常に最上位で定義されていると見なされる場所に変数を定義します。
巻き上げ効果が原因である場合でも、未定義の代わりに 10 を警告する必要があります。