jsでオーバーロード?

先日jsの関数を拡張しフラグを引数に追加させたいということがあった
jsの仕様?では同名の関数は作れないらしい
従って型の違いによるオーバーロードはできない(そもそも型の概念がないのだが)
また引数の数によるオーバーロードもできない
ところが引数が2つの場合、第一引数のみ指定しても第二引数がその関数内で使用されないなどの場合は問題なくその関数を使用できるらしい

func(0); // 第一引数しか指定していないが問題ない

function func(p1, p2) {
}

さらに調べてみるとarguments.lengthで渡された引数の数を取得できるようだ
これを使えば引数の数によるオーバーロード風の処理ができそうだ

function func(p1, p2) {
    switch (arguments.length) {
    case 1:
        break;
    case 2:
        break;
    default:
    }
}

感覚的にはC++のデフォルト引数とかVBのOptionalと同じような感じ