| | 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]] |