JavaScriptをがんばるブログ

React,OSS,ソフトウェア開発が中心のブログです👨‍💻

JavaScriptの関数は、仮引数と実引数の個数が違ってもエラーにならない

日経ソフトウエア2016年3月号の「基礎から学ぶJavaScript」のコラムに面白い事が書いてあった。

日経ソフトウエア 2016年 03 月号 [雑誌]

日経ソフトウエア 2016年 03 月号 [雑誌]

以下のコード、
仮引数が定義されていない関数に文字列の引数を3つ渡して呼び出しているが、普通に実行出来る。
そして渡された値がargmentsグローバル変数連想配列として格納されている。

このように、仮引数よりも実引数が少なかった場合も正常に実行される。

alpha("foo", "bar", "hoge");

function alpha(a, b, c, d) {
    console.log(arguments);
}

// { '0': 'foo', '1': 'bar', '2': 'hoge' }

rubyだとこうはいかない

一方PHPではfunc_get_args()関数で同じような動作が実現出来るが、
実引数が仮引数よりも少ない場合のみエラーとなる。

関数のオーバーロードが出来ないので、func_get_args()などを使い引数を判定して処理を分岐させる微妙な処理をWordpressの内部コード等でよく見ますが、

qiita.com

JavaScriptオーバーロードが出来ないので、擬似オーバーロードしたいときにargments変数を使えるかもしれません。