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

削除された内容 追加された内容
編集の要約なし
編集の要約なし
2 行
 
== 変数の宣言方法の全体像 ==
「変数」には、データを一定のあいだ保存するために、メモリ上に値を格納できる機能があります。また、変数の「宣言」とは、メモリ上にこれから変数のデータを格納し始める事を命令し始める事です。
JavaScriptで変数を宣言する方法は、一般的には<code>var</code>または{{code|let}} キーワードで宣言します。Varの読みは特に決まってないので、「バル」とか「バー」とか読めばいいと思います。
 
JavaScriptで変数を宣言する方法は、一般的には<code>var</code>または{{code|let}} キーワードで宣言します。Var var の読みは特に決まってないので、「バル」とか「バー」とか読めばいいと思います。
 
;コード例
26 ⟶ 28行目:
 
しかし、この直接作成の方法は、非推奨です。(書籍などでも紹介されない場合も多い。)
また、strictモードでは、キーワード無しの直接作成の方法は、使用が禁じられています。(なお、既に var または let で作成された変数の値を書き換えるのなら、キーワード無しでも可能です。また、letは宣言以外で使用が禁止されていますので(let宣言された変数を置き換える場合、キーワード無しで置き換えます)、この仕様は重要です。)
 
 
また、第三者のプログラマーにとっての可読性が、キーワード無しの直接作成の方法では悪くなります。
 
 
なので、変数の作成の際には、なるべく var または let をつけましょう。
 
var と let の違いは、主に関数のブロックに対する振る舞いの違いです(詳しくは let の単元で後述します。)。let のほうが、C言語の変数宣言の仕組みに近い古い舞いになります。そのためか今後の予想としては、let のほうが、より推奨されることが、プログラマー界隈では予想されます。なぜなら let のほうが、条件分岐(if文)や繰り返し処理(for文)と組み合わせたときの変数の振る舞いが、C言語など他のプログラム言語における変数のあり方に近くなるからです。なお、ECMA2015からletが導入されましたので、それ以前のバージョンのJavaScriptではletは使えないです。
 
なお、ECMA2015からletが導入されましたので、それ以前のバージョンのJavaScriptではletは使えないです。
 
とりあえず、キーワード無しで宣言するのと比べたら、var宣言でもいいでキーワードの存在しているほうが可読性も良く、遥かにマシなので、まずは var キーワードをつけて変数を宣言するように心がけましょう。
 
 
442 ⟶ 447行目:
※ 検索用アンカー {{anchor|let}}
==== let ====
===== 基本 =====
var キーワードは関数スコープを持つのに、if文やfor文などのスコープを持たないので、不便な場合があったり、JavaScriptに馴れないプログラマーに混乱を引きおこす場合がありました。
 
464 ⟶ 470行目:
 
ただしFirefox 39までの実装にはバグがあり、<code>for</code>の条件式で<code>let</code>で宣言された変数が<code>for</code>の外に見えてしまっていました<ref>[//bugzilla.mozilla.org/show_bug.cgi?id=854037 Bug 854037 - fresh binding per iteration of C-style for-let]</ref>。[[:w:GNU IceCat|Gnuzilla Icecat]]の最新版はいまだに {{いつ|date=2020年7月}} 38ですので注意してください。
 
 
===== let の特性 =====
let は、ひとつのスコープ内での再宣言が出来ません。
 
<syntaxhighlight lang="html5">
<script>
// このコードはエラー
let x = 1;
let x = 2; // 再宣言してるのでエラー
 
// x + 3 を計算
document.write(x + 3); // 既にエラーなので「5」は表示されない
</script>
</syntaxhighlight>
 
 
C言語での変数の宣言などは、各スコープで1回っきりですので、それと同じように考えればいいのですが、
 
しかし、別の問題として、JavaScript では、キーワード無しの変数の利用を禁止しています。
 
 
つまり、
<syntaxhighlight lang="html5">
<script>
// このコードは可能
let x = 1;
x = 2; // キーワード無しなので可能
 
// x + 3 を計算
document.write(x + 3); // 5 と表示
</script>
</syntaxhighlight>
 
 
let 宣言された変数は、strict モードでも利用が可能です。つまり、下記のコードは表示が可能です。
<syntaxhighlight lang="html5">
<script>
'use strict';
 
let x = 1;
 
x = 2;
// x + 3 を計算
document.write(x + 3); // 5 と表示
</script>
</syntaxhighlight>
 
 
 
 
== 脚注 ==