目次

オブジェクトなJavaScriptの基礎講座

関数について

◆ はじめに

JavaScriptでは、関数は、非常に重要です。C言語的な関数の使い方はもちろん、オブジェクトのコンストラクタやメソッドを定義する際に使用します。

◆ 概説

関数は、ある処理単位をひとかたまりにしたもので、入力情報を渡し、その名前で呼び出して出力情報を獲ることができます。

関数を定義するときは function 関数名() { .... } という形で書きます。

      function kansuSPadd(para){ 
          :
          return rc;  // 呼び出し側に変数rcの値が返される
      }
      :
      outinf = kansuSPadd(i);  // 関数の呼び出し
      :

関数名:kansuSPadd 仮引数:para 実引数:i(入力情報) 戻り値:rc (出力情報)

例、与えられた個数の漢字の空白文字列を作る関数 kansuSPadd(para)を作ります。

<script type="text/javascript">
     function kansuSPadd(para){
         rc = "";
         for (i = 0; i < para; i++)
              rc = rc + " ";
         return rc;   
     }

     for (i = 0; i <= 8; i++){
         document.write(kansuSPadd(i) + "Welcame to Chaichan's Page <br>");
     }
     for (i = 8; i >= 0; i--){
         document.write(kansuSPadd(i) + "Welcame to Chaichan's Page <br>");
     }
</script>

尚、document.writeはdocumentオブジェクトを参照してください。今回はブラウザ出力です。


例の処理結果

他の関数宣言方法

関数宣言方法は、実は、上記の関数宣言方法の他にあと2通りあり、全部で3通りの方法があります。

  1. function 文 - 上記のような、一般的な function キーワードを先頭に記述する方法。
  2. 関数リテラル - function 文の関数部分をリテラルとして代入文で記述する方法。
  3. Function コンストラクタ関数 - Functionオブジェクトとして記述する方法。
関数リテラル

要は、function 文を代入文のように記述します。たとえば、上記のkansuSPadd関数は以下のように記述できます。

var  kansuSPadd = function (para){
         rc = "";
         for (i = 0; i < para; i++)
              rc = rc + " ";
         return rc;   
     };
Function コンストラクタ関数
  var 関数名 = new Function( "引数1" , "引数2" , "引数3" , ... , "処理" );

尚、ループ内でFunction コンストラクタ関数を使用する場合は、ループの回数分Functionオブジェクトを作成しますので注意が必要です。(無駄なメモリを食う)

◆ 補足説明

上記はC言語的な関数の使い方ですが、本来、JavaScriptにおいて「関数」とはコンストラクタやメソッドを定義するために用います。(後述、オブジェクトのところで詳しく説明いたします。)

arguments配列

また、引数は、arguments配列を使っても取得できます。

  function Person( name , age , sex )
  {
    for( var i = 0 ; i < arguments.length ; ++i )
      document.write( arguments[i] );
  }
  
  Person( "Chaichan" , 13 , "WOMAN" );
実行結果

結果として、関数の引数は、書いても書かなくてもエラーにならず、書かない時は、arguments配列で引数を取得できます。

大域変数と局所変数

あと、関数の外部に宣言された文字を大域変数といい、関数の内側から参照することが出来ます。大域変数に対して、関数の内部に宣言された文字を局所変数と言って関数の外部からや別の関数から参照することは出来ません。局所変数は関数が呼び出されたときだけ有効になって、関数が処理を終えて終了するとその変数は無効になります。

<script type="text/javascript">
var t_value;          // 大域変数
var  kansuSPadd = function (para){
         rc = "";    //局所変数
         for (i = 0; i < para; i++)
              rc = rc + " ";
         return rc;   
     };
</script>

また、関数の内部に更に関数を定義することが出来ます。これを局所関数と言います。局所関数はその関数の内部だけで有効で、外部には働きません。また、script要素の直下に記述した関数は、大域関数となりどこからも有効になります。

目次