私はJavaScriptスコープとホイストの基本的な概念を理解しているようでした。このquestion+answerは、その点で私を多く助けました。Javascript:ifブロック内にはどのように吊り上げられますか(ない)?
最近、私は何かに出くわしましたが、それは少し驚きました。次のコードを考えてみましょう:私が学んだことを考えると
がvar a = 1;
if (true) {
console.log(a);
let a = 2;
}
console.log(a);
、私は出力undefined
と1
にそれを期待します。それはUncaught ReferenceError: a is not defined
になりますが。
私の理解は、上記のそのコードは、(の宣言部は、最も近いinclosingブロックに掲揚されるべきである - この場合、if
ある)と等価であるべきである。
var a = 1;
if (true) {
let a;
console.log(a);
a = 2;
}
console.log(a);
このコード、ちなみに、私が期待する通り、undefined
と1
が生成されます。
私の質問は次のとおりです。
- は、彼らの最も近い外側のブロック内部の掲揚
let
で宣言した変数、ありますか?- はいの場合、最初のブロックのコードが
Uncaught ReferenceError: a is not defined
になるのはなぜですか?
- はいの場合、最初のブロックのコードが
これは多言語に共通する振る舞いの本当に奇妙な名前です。 –
あなた自身の質問に答えました。おめでとうございます。 – noChance
まず回答を準備してから質問を投稿してください。 – Mamun