スタートページJavascript関数への引数渡し

可変個引数


例1:引数の個数が異なるときの処理

3個の数値を加える関数「加算関数」を想定します。

    function 加算関数(引数1, 引数2, 引数3) {
      var 合計 = 引数1 + 引数2 + 引数3;
      return 合計;
    }

呼出し側の引数個数により、次の結果になります。

(注意)実関数がないことの確認方法

ケース3で、引数3がないときはデフォルト値を用いるという使いかたがあります。それには
    if (引数3 == null) 引数3 = デフォルト値;
とします。
 alert(引数3); とすると ubdefined と表示されますが、if (引数3 == "undefined") としたのでは正しく処理されません。if (引数3 == "") としてもダメです。

    function 加算関数(引数1, 引数2, 引数3) {
        var 合計 = 引数1 + 引数2 + 引数3;
        return 合計;
    }
    function 例1() {
        var 答;
        答 = 加算関数(10, 20, 30);      // 引数が3個
          alert("ケース1:答 = " + 答);
        答 = 加算関数(10, 20, 30, 40);  // 引数が4個
          alert("ケース2:答 = " + 答);
        答 = 加算関数(10, 20);          // 引数が2個
          alert("ケース3:答 = " + 答);
    }

ケース4は実行されない

 

例2:argumentsオブジェクトによる可変個引数の実現

組み込み関数のなかには、
    Marh.max(30, 50, 10);
    Marh.max(30, 50, 10, 20, 40);
のように、引数の個数が任意な関数があります。

次のプログラムの「最大関数() 」は、Marh.max() と同じ機能を実現したものです。
 [実行」ボタンをクリックすると、関数「例1」が起動し、
    最大値 = 最大関数(30, 50, 10, 20, 40);
により、最大値である「50」が表示されます。

    function 最大関数() {
        var 最大値 = Number.NEGATIVE_INFINITY;        //  行C
        var 引数要素数 = arguments.length;            //  行B
        for (var i = 0; i < 引数要素数; i++) {
            var 引数要素値 = arguments[i];            //  行A
            if (引数要素値 > 最大値) 最大値 = 引数要素値;
        }
        return 最大値;
    }

    function 例2() {
        最大値 = 最大関数(30, 50, 10, 20, 40); 
        alert(最大値);
    }

50が表示される

これを実現しているのがargumentsオブジェクトです。
 「最大関数」には仮引数がない(0個)のですが、呼び出されると、呼出し側の関数「例1」で与えた実引数が、自動的に配列 arguments[i] に入り(行A)、その要素数(実引数の個数)が arguments.length に入ります(行B)。
 この例では、
    arguments[0] = 30, arguments[1] = 50, … , arguments[4] = 40
    arguments.length = 5
となります。
 (なお、行Cの Number.NEGATIVE_INFINITY は、Javascriptで表現できる最小の値(負の無限大に相当)を与えるものです。最大値は Number.POSITIVE_INFINITY です。)