JavaScript 関数パラメータ


JavaScript 関数はパラメータの値に対して何のチェックも行いません。


関数の明示的パラメータ(Parameters)と暗黙的パラメータ(Arguments)

前のチュートリアルでは、関数の明示的パラメータについて学びました:

functionName(parameter1, parameter2, parameter3) { //実行するコード…… }

関数の明示的パラメータは関数定義時に列挙されます。

関数の暗黙的パラメータは関数呼び出し時に関数に実際の値を渡します。


パラメータのルール

JavaScript 関数は明示的パラメータを定義する際にデータ型を指定しません。

JavaScript 関数は暗黙的パラメータに対して型チェックを行いません。

JavaScript 関数は暗黙的パラメータの個数チェックを行いません。


デフォルトパラメータ

ES5 では、関数呼び出し時に暗黙的パラメータが提供されない場合、パラメータはデフォルトで次のように設定されます:undefined

これで問題ない場合もありますが、パラメータにデフォルト値を設定することをお勧めします:

例(ES5)

function myFunction(x, y) { if (y === undefined) { y = 0; } }

試してみる »

または、より簡単な方法:

例(ES5)

function myFunction(x, y) { y = y || 0; }

試してみる »

Note y がすでに定義されている場合、y || 0y を返します。y は true だからです。それ以外の場合は 0 を返します。undefined は false だからです。

関数呼び出し時にパラメータが多すぎる場合、対応するパラメータ名が見つからないため、パラメータを参照できません。arguments オブジェクトを使用してのみアクセスできます。

ES6 関数はデフォルトパラメータを持てる

ES6 は関数がデフォルトパラメータを持つことをサポートしており、undefined と || の判定操作を行います:

例(ES6)

function myFunction(x, y = 10) { // y is 10 if not passed or undefined return x + y; } myFunction(0, 2) //出力 2 myFunction(5); //出力 15、y パラメータのデフォルト値

試してみる »

arguments オブジェクト

JavaScript 関数には、組み込みのオブジェクトである arguments オブジェクトがあります。

arguments オブジェクトには、関数呼び出しのパラメータ配列が含まれています。

この方法を使うと、最大のパラメータの値を簡単に見つけることができます:

例

x = findMax(1, 123, 500, 115, 44, 88); function findMax() { var i, max = arguments[0]; if(arguments.length < 2) return max; for (i = 0; i < arguments.length; i++) { if (arguments[i] > max) { max = arguments[i]; } } return max; }

試してみる »

または、すべての数値の合計を計算する関数を作成します:

例

x = sumAll(1, 123, 500, 115, 44, 88); function sumAll() { var i, sum = 0; for (i = 0; i < arguments.length; i++) { sum += arguments[i]; } return sum; }

試してみる »


値によるパラメータの受け渡し

関数内で呼び出されるパラメータは関数の暗黙的パラメータです。

JavaScript の暗黙的パラメータは値によって渡されます。関数は単に値を受け取るだけです。

関数がパラメータの値を変更しても、明示的パラメータの初期値(関数外で定義された値)は変更されません。

暗黙的パラメータの変更は関数外では見えません。


オブジェクトによるパラメータの受け渡し

JavaScript では、オブジェクトの値を参照できます。

したがって、関数内でオブジェクトのプロパティを変更すると、その初期値も変更されます。

オブジェクトのプロパティの変更は関数外部(グローバル変数)にも影響します。

オブジェクトのプロパティの変更は関数外でも確認できます。

その他の拡張