他のコードブロックを貫通します。それは、JavaScriptは長い間ブロックがレキシカル環境を持っていなかったためです。宣言は、関数の開始時(またはグローバルのスクリプト開始時)に処理されます。変数は関数の最初で定義され、定義される場所は関係ありません(定義がネストされた関数ではないと言う仮定で)。分岐は決して実行されませんが、それは関係ありません。時点で変数は存在します。宣言は巻き上げられますが、代入はされません。=.宣言は関数実行の開始時に処理されます(“巻き上げ”)が、代入は常にそれが出現した場所で行われます。宣言が関数開始時に処理されるため、どこからでもそれらを参照することができます。エラーなく動作します。