function multiply(a, b = 1) { return a*b; } multiply(5); // 5
2番めの引数で、undefined(nullではない)を渡してもデフォルト引数が利用されます
function setBackgroundColor(element, color = 'rosybrown') { element.style.backgroundColor = color; } setBackgroundColor(someDiv); // color に 'rosybrown' が設定される setBackgroundColor(someDiv, undefined); // これも color に 'rosybrown' が設定される setBackgroundColor(someDiv, 'blue'); // color に 'blue' が設定される
n番目の引数を使って、n+1番め以降の後続の引数のデフォルト値とすることが出来ます。
function mul(a, b = a) { return a * b; } hm.debuginfo( mul(3) ); // 9
この性質を利用すれば、引数が渡されていないとエラーを出すことなども可能です。
function CheckArgumentException() { return "NoArgumentException"; } function abc( val = CheckArgumentException() ) { return val.toString(); } hm.debuginfo( abc() ); // "NoArgumentException"
分割代入の性質を利用することで、関数の引数を名前引数であるかのように扱うことが出来ます。
このテクニックは様々なスクリプト言語で利用されています。
function mywindow({top = 10, left = 10, width = 100, height = 60}) { return [top, left, width, height] } hm.debuginfo(mywindow({top:200, height:300})); // [200,10,100,300]
分割代入の機能を利用しているだけですので、特定の値だけを取り出す目的にも使えます
function printtop({top}) { hm.debuginfo(top) } let data = {top:200, height:300}; printtop(data);
function sum(...args) { let sum = 0; for(let n of args) { sum += n; } return sum } hm.debuginfo(sum(100,200,300));
function sum(...args) { let sum = 0; for(let n of args) { sum += n; } return sum } let sum1 = sum(10,20,30) hm.debuginfo(sum1); let arr = [10,20,30] let sum2 = sum(...arr) // 配列を引数リストに展開 hm.debuginfo(sum2);