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

削除された内容 追加された内容
Ef3 (トーク | 投稿記録)
→‎const: <code>const</code> で宣言された変数と<code>let</code> で宣言された変数との違い * <code>const</code> で宣言された変数は、初期化が必須 * <code>const</code> で宣言された変数は、代入式の左辺に出来ない
タグ: 2017年版ソースエディター
Ef3 (トーク | 投稿記録)
→‎var: プログラマが意図的に'''未宣言のグローバル変数'''を作ることはホボあり得えませんが、スペルミスが'''未宣言のグローバル変数''' を作ってしまう主な原因です。ローマ字(日本語のラテン文字翻字)には、何種類も流儀があるので識別子をローマ字表記するのは、少なくとも動的言語には向きません(危険です)
タグ: 2017年版ソースエディター
230 行
特別な理由があるとき以外は、 const あるいは let で宣言してください。
 
''';var を使ったコード例''':<syntaxhighlight lang="javascript">
<syntaxhighlight lang="javascript">
var x = 2;
console.log(x + 3); // x + 3 を評価した結果の 5 を表示
240 ⟶ 239行目:
=== 未宣言のグローバル変数 ===
宣言を行う前に変数に代入することはできます。
:<syntaxhighlight lang="javascript">
x = 2;
console.log(x + 3); // x + 3 を評価した結果の 5 を表示
</syntaxhighlight>
: 宣言を行っていない変数に値を代入することも可能で'''未宣言のグローバル変数'''を生成します。
 
ただし、'''未宣言のグローバル変数の生成は[[JavaScript/strictモード|strictモード]]では SyntaxError になる'''ことからも判る通り'''非推奨'''です。
未宣言のグローバル変数の挙動は予測困難で難解なバグの原因になりえます。
このため、未宣言のグローバル変数はつくらないよう必ず {{code|const}}, {{code|let}} または <code>var</code> で宣言しましょう。
{{See also|[[JavaScript/関数|varの巻上げ]]}}
 
;ミススペルの産物
<syntaxhighlight lang="javascript">
: プログラマが意図的に'''未宣言のグローバル変数'''を作ることはホボあり得えませんが、スペルミスが'''未宣言のグローバル変数''' を作ってしまう主な原因です。
var x;
:<syntaxhighlight lang="javascript">
console.log(x); // undefined を表示(ReferenceErrorになるのは未宣言の場合で、この場合はならない)
var xhensu;
y = 100; // 未宣言変数への代入
/*
console.log(y); // 100 を表示、結果的に代入が宣言のように振る舞う。
* 少し長めの行数
z = 200; // グローバル変数への代入の実体は、グローバルオブジェクトのプロパティへの代入
*
window.z = 200; // これとおなじ
*/
hensuu = "abc"; // ミススペルで出来てしまった「未宣言のグローバル変数」
</syntaxhighlight>
: ローマ字(日本語のラテン文字翻字)には、何種類も流儀があるので識別子をローマ字表記するのは、少なくとも動的言語には向きません(危険です)
 
;代入をする時、それまでの値の型と違う型であっても構いません。
既に var または let で作成された変数の値を書き換えるのならキーワード無しでも可能ですが、その場合は宣言ではなく代入になります。
:<syntaxhighlight lang="javascript">
var x = 8;
console.log(x); // 8 を表示
x = "abc"; // 違う型のオブジェクトを代入
console.log(x); // abc を表示
</syntaxhighlight>
:JavaScriptは動的な言語なので「変数はオブジェクトに名前を提供し参照の手助け」をしていることを端的に表しています。
代入をする時、それまでの値の型と違う型であっても構いません。
JavaScriptは動的な言語なので「変数はオブジェクトに名前を提供し参照の手助け」をしていることを端的に表しています。
 
== 変数のスコープ ==