| 264 | |
| 265 | |
| 266 | == 変数 == |
| 267 | |
| 268 | 変数とは、値を 1つだけ保存しておくことができる名前のことです。手続き型の言語であれば必ず存在する、おなじみの概念ですね。 |
| 269 | |
| 270 | === 変数の宣言 === |
| 271 | |
| 272 | !JavaScript で使用する変数を宣言するには、 '''var''' 命令を利用します。以下のように記述すると、 hoge という名前の変数を使いますよ、という宣言になり、以後、''そのスコープ内において''、変数 hoge を安全に使用することができるようになります。 |
| 273 | |
| 274 | {{{ |
| 275 | var hoge; // 変数 hoge を宣言する |
| 276 | }}} |
| 277 | |
| 278 | === 変数のスコープ === |
| 279 | |
| 280 | 先ほどの説明において、唐突に'''スコープ'''という語が出てきたので、戸惑ったかも知れません。スコープとは、その変数を利用できる範囲のことを言います。 |
| 281 | |
| 282 | !JavaScript では、変数を宣言した場所が関数内、即ち関数の処理内容を定義するブロック内のどこかであれば、その変数を宣言した位置から、関数の処理内容を記述するブロック内の末尾までが、その変数のスコープとなります。変数を宣言した場所が、どの関数にも含まれない、全くの外側である場合、その変数を宣言した位置から、プログラム全体の末尾までが、その変数のスコープとなります。 |
| 283 | |
| 284 | {{{ |
| 285 | // ...処理... (この辺は変数 hoge のスコープに含まれない) |
| 286 | |
| 287 | var hoge; // 変数 hoge のスコープはここから始まる |
| 288 | |
| 289 | // ...処理... (この辺は変数 hoge のスコープに含まれる) |
| 290 | |
| 291 | function Func() { |
| 292 | |
| 293 | // ...処理... (この辺は変数 hoge のスコープに含まれる…fuga のスコープには含まれない) |
| 294 | |
| 295 | var fuga; // 変数 fuga のスコープはここから始まる |
| 296 | |
| 297 | // ...処理... (この辺は変数 hoge, fuga 両方のスコープに含まれる) |
| 298 | |
| 299 | } // 関数終了 - 変数 fuga のスコープはここで終わる |
| 300 | |
| 301 | // ...処理... (この辺は変数 hoge のスコープに含まれる…fuga のスコープには含まれない) |
| 302 | }}} |
| 303 | |
| 304 | 関数は入れ子で定義することができますが、その場合、より内側の関数内で宣言された変数は、その内側にある関数内のみがスコープとなります。 |
| 305 | |
| 306 | {{{ |
| 307 | function Func() { |
| 308 | var hoge; |
| 309 | |
| 310 | function SubFunc() { |
| 311 | var fuga; |
| 312 | |
| 313 | // ...処理... (この辺は変数 hoge, fuga 両方のスコープに含まれる) |
| 314 | |
| 315 | } |
| 316 | |
| 317 | // ...処理... (この辺は変数 hoge のスコープに含まれる…fuga のスコープには含まれない) |
| 318 | |
| 319 | } |
| 320 | }}} |
| 321 | |
| 322 | === 宣言されていない変数 === |
| 323 | |
| 324 | !JavaScript では、まったく宣言されていない名前の変数にいきなり値を代入しても、エラーにはなりません[[FootNote(コンソールに警告を出力する処理系はあるかも知れません。)]]。この場合、その変数は、'''グローバルオブジェクト'''のメンバフィールドとして扱われます。 |
| 325 | |
| 326 | Web ブラウザに実装された !JavaScript エンジンの場合、グローバルオブジェクトは window になりますので、下記のような場合には、 |
| 327 | |
| 328 | {{{ |
| 329 | hoge = "fuga"; // この変数 hoge はまだ宣言されていない |
| 330 | }}} |
| 331 | |
| 332 | 以下のように記述するのと同じ意味になります。 |
| 333 | |
| 334 | {{{ |
| 335 | window.hoge = "fuga"; // Web ブラウザでは window がグローバルオブジェクト |
| 336 | }}} |
| 337 | |
| 338 | グローバルオブジェクトは !JavaScript エンジンを搭載しているアプリケーションによって異なりますので (それは system かも知れませんし、 global かも知れませんし、あるいはアプリケーションの名前かも知れません)、事前に確認しておいた方がよいでしょう。 |
| 339 | |
| 340 | [[FootNote]] |