「JavaScript/変数」の版間の差分

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎変数のスコープ: s/変数が値を保持する範囲/変数が参照可能な範囲/;宣言・初期化・代入の区別を明確にした。
Ef3 (トーク | 投稿記録)
→‎定数: strict モードでなくても const の初期化は必須であり、再代入は SyntaxError。
219 行
定数(ていすう)は<code>const</code>キーワードで宣言します。
 
数学において、定数(ていすう)とは変動しないで、同じままのことです。
 
JavaScriptにおける定数は、宣言と同時に代入しなければならず、値は変更できません。
<syntaxhighlight lang="html5">
<script>
'use strict';
 
JavaScriptにおける定数は宣言と同時に代入しなければらず初期化が必須でその後値は変更できません。
<syntaxhighlight lang="html5javascript">
const E; // SyntaxError: Missing initializer in const declaration
 
</script>
</syntaxhighlight>
 
const で宣言された変数(定数)のスコープは let で宣言された変数と同じ'''ブロックスコープ'''を取ります。
定数はスコーログラムの全域で使われるような不変なデータに対して用いられ、スコーログラムの冒頭で宣言されるのが典型的な使われ方です。
 
<syntaxhighlight lang="html5">
<script>
'use strict';
 
<syntaxhighlight lang="html5javascript">
const E = 3;
 
documentconsole.writelog(E); // 3
 
E = 2.7; // TypeError: Assignment to constant variable.
</script>
</syntaxhighlight>
 
定数名は全大文字でアンダーバーで単語を区切り、<code>const CONSTANT_VALUES_LIKE_THIS</code>のようにスネークケースで書く慣習があります(ここで述べているのは習慣で、識別名として妥当であれば任意の変数名でconst変数宣言が出来ます)
<!--
<SyntaxHighlight lang="javascript">
'use strict';
 
const E = 3;
 
console.log(E); // 3
 
E = 2.7; // TypeError: Assignment to constant variable.
</SyntaxHighlight>
-->
 
 
定数名は全大文字で、<code>const CONSTANT_VALUES_LIKE_THIS</code>のようにスネークケースで書く慣習があります。
 
constと宣言された定数への代入は SyntaxError を throw します。
267 ⟶ 245行目:
</syntaxhighlight>
 
const は定数を宣言しますが、Array(配列)Arrayオブジェクトや Object(連想配列)Objectオブジェクトのような複合的なオブジェクト(コレクション)の要素の変更は妨げません。<!--混乱するのでObject.seal() メソッドやObject.freeze()メソッドには触れなかった。-->
<syntaxhighlight lang="javascript" line>
const ary1 = [1,2,3];
274 ⟶ 252行目:
console.log(ary); // 1,abc,3
</syntaxhighlight>
# 変数 ary1 に配列インスタンスで初期化
* 3行目で定数な筈のaryの要素を書き換えています(ary1を書き換えるのは出来ませんが要素は可能)。
# 変数 ary2 に ary1 を初期化したインスタンスで初期化
* 3行目で変更したのは ary2 の1番めの要素なのに、4行目で表示するとary1の要素が書き換わっています。
# 定数な筈のaryの要素を書き換え(ary1を初期化したインスタンスの要素の書き換え)。
**# 書き換えたのは ary2 の1番めの要素なのに、ary1の要素が書き換わっている。これは、2行目でary2をary1で初期化しているためで、この時 ary2 は ary1 の別名になっています。
 
== 変数のスコープ ==