1. 予約語
jvascriptでは,次のような単語をシステムで使うために予約しているので,我々がプログラムを書くときに使うことはできません.
2. javascriptで変数や関数の名前として使えるもの
javascriptでは,変数や関数の名前は,
(T) 必ず半角(1バイト文字)で書くこと=全角文字(ひらがな,カタカナ,漢字など2バイト文字)は使えない.(変数の名前としてではなく,シングルクォートまたはダブルクォートで囲まれた文字列のデータとしては使えます.[例] aa1 = 'おはよう';)
(U) アルファベットまはた下線(アンダーバー)で始まり,2文字目以降はアルファベット,数字,下線のどれを使ってもよい. (V) アルファベットの大文字と小文字は区別されるので,例えば,my_Weight, My_weightなどは別の変数になる. (これに対して,HTMLを記述するタグ <br><BR><bR>などは大文字と小文字で区別されない) |
では,左欄の予約語など使えないものを覚えなければならないのか?と疑問に思われるかもしれませんが,よく見ると「typeof」以外はすべて「英語の1つの単語」になっていることが分かります.そこで筆者は次のように変数名,関数名を付けるようにしています. 何に使われている名前なのかが分かる方が点検しやすいので,なるべく意味の分かる語句にする方がよい.しかし,予約語などと重複しないためには
(1) 日本語ローマ字(omosaなど)を使う
(2) 英単語なら2つ以上を組み合わせる(weight_lengthなど) (3) 末尾に数字を付ける(weight1) このように習慣付けると,予約語などと重複することはありません. ただし,他の人の作ったプログラムと組み合わせて使う必要が生じることがありますので, (4) アルファベットの1文字,2文字だけのような極端に短いものは避ける方がよいでしょう.
【要点】
変数名を1つの英単語だけで使うのは避ける. 2つ以上の単語を下線でつないだもの,日本語ローマ字,後ろに数字を付けたものなどは安全 |
3. 変数の有効範囲
(1) 関数の外で宣言された変数は「大域変数」になり,関数の外からでも中からでも読み書きできます.これは,変数宣言用のキーワードvarを使っていても同じです.特に,関数の外で宣言された変数と同じ変数名を使って関数の中で値を書き換えると大域変数の値は変わります.(2) 関数の中で変数宣言用のキーワードvarを用いて宣言された変数は,関数の中だけで読み書きされる「局所変数」になり,関数の外(他の関数からも)から読み書きすることはできません. (3) 当然のことながら,同じ変数名を重複して使わないようにするのがベストですが,関数の中から大域変数を書き変えたいことは起こります.
【例1】
aa1 = 1; function bb1() {aa1 = 2; } bb1(); document.write(aa1); ⇒ aa1の値は2と表示されます. これは,1行目がvar aa1 = 1;となっていても同じです.
【例2】
aa1 = 1; function bb1() {var aa1 = 2; } bb1(); document.write(aa1); ⇒ aa1の値は1と表示されます.これは,関数bb1()の中で局所変数として宣言されたaa1の値を2にしても大域変数のaa1には影響がないからです. |
【例3】
aa1 = 1; function bb1() {aa1 = 2; } document.write(aa1); ⇒ aa1の値は1と表示されます.関数bb1()は定義のときではなく,実行されたときに働きます.このプログラムでは,関数bb1()はまだ実行されていませんので変数aa1は影響を受けていません.
【例4】
aa1 = 1; function bb1() {aa1 = 2; aa2 = 3; } bb1(); document.write(aa2); ⇒ aa2の値は3と表示されます.関数bb1()が実行されているので,変数aa2は大域変数になります.
【要点】
「関数の中で」かつ「varを付けて宣言した」変数だけが局所変数になり,関数の外から影響されない. それ以外の変数,すなわち「関数の外でvarを付けて宣言された変数」「関数の外でvarを付けずに宣言された変数」「関数の中でvarを付けずに宣言された」変数は大域変数になり,1つのプログラムの中のどこからでも読み書きできる. |