「JavaScript/変数」の版間の差分
削除された内容 追加された内容
編集の要約なし |
編集の要約なし |
||
2 行
== 変数の宣言方法の全体像 ==
「変数」には、データを一定のあいだ保存するために、メモリ上に値を格納できる機能があります。また、変数の「宣言」とは、メモリ上にこれから変数のデータを格納し始める事を命令し始める事です。
JavaScriptで変数を宣言する方法は、一般的には<code>var</code>または{{code|let}} キーワードで宣言します。Varの読みは特に決まってないので、「バル」とか「バー」とか読めばいいと思います。▼
▲JavaScriptで変数を宣言する方法は、一般的には<code>var</code>または{{code|let}} キーワードで宣言します。
;コード例
26 ⟶ 28行目:
しかし、この直接作成の方法は、非推奨です。(書籍などでも紹介されない場合も多い。)
また、strictモードでは、キーワード無しの直接作成の方法は、使用が禁じられています。(なお、既に var または let で作成された変数の値を書き換えるのなら、キーワード無しでも可能です。また、letは宣言以外で使用が禁止されていますので(let宣言された変数を置き換える場合、キーワード無しで置き換えます)、この仕様は重要です。)
また、第三者のプログラマーにとっての可読性が、キーワード無しの直接作成の方法では悪くなります。
なので、変数の作成の際には、なるべく var または let をつけましょう。
var と let の違いは、主に関数のブロックに対する振る舞いの違いです(詳しくは let の単元で後述します。)。let のほうが、C言語の変数宣言の仕組みに近い古い舞いになります。そのためか今後の予想としては、let のほうが、より推奨されることが、プログラマー界隈では予想されま
なお、ECMA2015からletが導入されましたので、それ以前のバージョンのJavaScriptではletは使えないです。
とりあえず、キーワード無しで宣言するのと比べたら、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>
== 脚注 ==
|