JavaScriptの関数は、仮引数と実引数の個数が違ってもエラーにならない
日経ソフトウエア2016年3月号の「基礎から学ぶJavaScript」のコラムに面白い事が書いてあった。
- 作者: 日経ソフトウエア
- 出版社/メーカー: 日経BP社
- 発売日: 2016/01/23
- メディア: 雑誌
- クリック: 1回
- この商品を含むブログ (5件) を見る
以下のコード、
仮引数が定義されていない関数に文字列の引数を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の内部コード等でよく見ますが、
JavaScriptもオーバーロードが出来ないので、擬似オーバーロードしたいときにargments
変数を使えるかもしれません。