ECMA-262 v5.1 からの次の抜粋を検討してください(最近この質問で見ました)。
レキシカル環境は、ECMAScript コードのレキシカル ネスト構造に基づいて、識別子と特定の変数および関数との関連付けを定義するために使用される仕様タイプです。レキシカル環境は、環境レコードと、場合によっては外部レキシカル環境への null 参照で構成されます。通常、レキシカル環境は、FunctionDeclaration、WithStatement、または TryStatement の Catch 句などの ECMAScript コードの特定の構文構造に関連付けられており、そのようなコードが評価されるたびに新しいレキシカル環境が作成されます。
catch
これは、節の本体が関数のように独自の変数を巻き上げることを意味すると思っていましたが、明らかにそうではありません。
var a = 1;
try {
console.log(x); // ReferenceError
} catch(ex) {
console.log(a); // 1, not undefined
var a = 3;
}
理由を知っている人はいますか?catch
また、節が独自の語彙環境を必要とするのはなぜですか?