====== JavaScript 関数の引数 ====== --- //[[http://www.y2sunlight.com/water|y2sunlight]] 2021-04-05// ===== 引数の数 ===== JavaScriptでは引数の数をチェックしない。 function func(arg) { console.log(arg); } func(); // 出力:undefined func(1); // 出力:1 func(1, 2); // 出力:1 引数の有無は関数内でundefinedによって判断する。 function getArea(height, width) { if (height === undefined) height = 0; if (width === undefined) width = 0; return height * width; } console.log(getArea()); // 出力:0 console.log(getArea(10)); // 出力:0 console.log(getArea(10, 20)); // 出力:200 \\ ===== argumentsオブジェクト ===== argumentsオブジェクトは関数呼び出し時に自動的に生成され、引数の数とそれぞれの値を取得できる。 function getArea(height, width) { return arguments.length < 2 ? 0 : arguments[0] * arguments[1]; } console.log(getArea()); // 出力:0 console.log(getArea(10)); // 出力:0 console.log(getArea(10, 20)); // 出力:200 function max() { if(arguments.length > 0) { var m = arguments[0]; for (let i = 1, len = arguments.length; i \\ ===== 引数のデフォルト値 ===== [[js:top#ECMAScript|*2015]] function 関数名(引数=デフォルト値, …) function getArea(height=0, width=0) { return height * width; } console.log(getArea()); // 出力:0 console.log(getArea(10)); // 出力:0 console.log(getArea(10, 20)); // 出力:200 \\ ===== 可変長引数 ===== [[js:top#ECMAScript|*2015]] function 関数名(引数名, ・・・, ...引数名) function mySum(...values) { let sum = 0; for(v of values) sum += v; return sum; } console.log(mySum()); // 出力:0 console.log(mySum(1)); // 出力:1 console.log(mySum(1,2,3,4)); // 出力:10 ※ argumentsと異なり可変長引数はArrayオブジェクトである。 ==== 実引数(呼び出し側)での使い方 ==== 関数名(...配列オブジェクト); // 配列オブジェクトは仮引数リストに展開される function mySum(...values) { let sum = 0; for(v of values){ sum += v; } return sum; } console.log(mySum(...[1, 2, 3, 4])); // 配列は仮引数リストに展開される 出力:10 console.log(mySum([1, 2, 3, 4])); // スカラと配列の足し算が行われ文字列として表示される 出力:01,2,3,4 \\ ===== 名前付き引数 ===== [[js:top#ECMAScript|*2015]] function getArea({height=0, width=0}) { return height * width; } console.log(getArea({height:10, width:20})); // 出力:200