15
1. >>> const a = 2
2. >>> var a = 3
3. >>> a = 4
4. >>> a // print 2

操作ライン 3 が許可されているのはなぜですか? const は、キーワードがない場合よりも「グローバル」に見えます...

4

2 に答える 2

13

これは、どのようにconst機能するか(または機能しないか) です。

宣言されている関数に対してグローバルまたはローカルにできる定数1を作成します。定数は、同じスコープ内の関数または変数を持つ変数 [.. および名前を共有できない] と同じスコープ規則に従います。

Firefox [..] 2 [再割り当てとは異なる] 定数を再宣言すると、TypeError がスローされます。定数[..]に別の値を割り当てた場合、主要なブラウザーのいずれも通知やエラーを生成しません2,3が、Firefox と Chrome (少なくともバージョン 20 以降) でのみ再割り当てが失敗します。

constは ECMAScript 5 仕様の一部ではなく、JavaScript 1.5 セマンティクスはECMAScript 6 で再定義されることに注意してください。

動作、サポートおよび再宣言/再割り当てのセマンティクスに関して、ブラウザーの実装によって異なります。


1 IE 9 で使用const a = 2すると、

"構文エラー"

2 FF 14 ではconst a = 2; var a = 3; a = 4; a、 を 1 つのプログラムとして評価すると、

TypeError: const a の再宣言

これは、REPL で一度に 1 行ずつ実行するのとは異なります。これは、が上に持ち上げられているためであり、const は「同じスコープ内の関数または変数と名前を共有できない」ためだと思われます。varconst

3 Chrome 21 では、const a = 2; var a = 3; a = 4; a警告やメッセージなしで 2 と評価されます。

于 2012-09-05T00:02:18.533 に答える