10

新しい ECMASCRIPT-6 constキーワードをいじっていました。キーワードの 1 つの特定の動作がわかりませんでした。

2つの機能があるとしましょう

最初のケース

(function(){
  console.log(_t); 
  const _t=10;
})();

そして 2番目のケース

function t(){
  console.log(_y); 
  const _y=11;
}
t();

最初のケースの出力は(理由がわかりませんでした)

ReferenceError: 初期化前にレキシカル宣言 `_t' にアクセスできません

2番目のケースでは、出力は(罰金)です

未定義

2 番目のケースの出力は期待どおりですが、最初のケースの結果がエラーをスローする理由がわかりません。変数が巻き上げられていないことは、エラーから推測できます。しかし、なぜ?ブロック スコープを使用するhereを見つけました。このスコーピングと何か関係がありますか?const

Firefox Developer Version コンソールを使用してテストを実行しています。

4

2 に答える 2

4

これは、こちらで言及されている Firefox 関連の問題です。

Firefox 固有の注意事項

const 宣言は、const が ECMAScript 6 仕様に登場するずっと前から Firefox に実装されていました。const ES6 準拠については、バグ 950547 とバグ 611388 を参照してください。

Gecko 36 以降 (Firefox 36 / Thunderbird 36 / SeaMonkey 2.33):

{const a=1};a は ReferenceError をスローし、ブロックスコープにより 1 を返さなくなりました。const a; SyntaxError をスローするようになりました (「const 宣言に = がありません」): 初期化子が必要です。const a = 1; = 2; SyntaxError (「const a への無効な代入」) もスローするようになりました。

また、ここでも何かを見つけました

Firefox エンジンは const 巻き上げに非常に厳しいと思います。

これは理にかなっていると思います。

于 2015-05-27T10:45:31.160 に答える