Changes between Version 6 and Version 7 of HowTo/JavaScriptLanguageIntroduction/ValueAndVariable


Ignore:
Timestamp:
Aug 12, 2010, 1:41:53 PM (14 years ago)
Author:
村山 俊之
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • HowTo/JavaScriptLanguageIntroduction/ValueAndVariable

    v6 v7  
    262262var b = null.toString();    // これもエラー!!
    263263}}}
     264
     265
     266== 変数 ==
     267
     268変数とは、値を 1つだけ保存しておくことができる名前のことです。手続き型の言語であれば必ず存在する、おなじみの概念ですね。
     269
     270=== 変数の宣言 ===
     271
     272!JavaScript で使用する変数を宣言するには、 '''var''' 命令を利用します。以下のように記述すると、 hoge という名前の変数を使いますよ、という宣言になり、以後、''そのスコープ内において''、変数 hoge を安全に使用することができるようになります。
     273
     274{{{
     275var hoge;   // 変数 hoge を宣言する
     276}}}
     277
     278=== 変数のスコープ ===
     279
     280先ほどの説明において、唐突に'''スコープ'''という語が出てきたので、戸惑ったかも知れません。スコープとは、その変数を利用できる範囲のことを言います。
     281
     282!JavaScript では、変数を宣言した場所が関数内、即ち関数の処理内容を定義するブロック内のどこかであれば、その変数を宣言した位置から、関数の処理内容を記述するブロック内の末尾までが、その変数のスコープとなります。変数を宣言した場所が、どの関数にも含まれない、全くの外側である場合、その変数を宣言した位置から、プログラム全体の末尾までが、その変数のスコープとなります。
     283
     284{{{
     285// ...処理... (この辺は変数 hoge のスコープに含まれない)
     286
     287var hoge;           // 変数 hoge のスコープはここから始まる
     288
     289// ...処理... (この辺は変数 hoge のスコープに含まれる)
     290
     291function 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{{{
     307function 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
     326Web ブラウザに実装された !JavaScript エンジンの場合、グローバルオブジェクトは window になりますので、下記のような場合には、
     327
     328{{{
     329hoge = "fuga";  // この変数 hoge はまだ宣言されていない
     330}}}
     331
     332以下のように記述するのと同じ意味になります。
     333
     334{{{
     335window.hoge = "fuga";   // Web ブラウザでは window がグローバルオブジェクト
     336}}}
     337
     338グローバルオブジェクトは !JavaScript エンジンを搭載しているアプリケーションによって異なりますので (それは system かも知れませんし、 global かも知れませんし、あるいはアプリケーションの名前かも知れません)、事前に確認しておいた方がよいでしょう。
     339
     340[[FootNote]]