Лично я предпочитаю написать наиболее сложную функцию, которая будет выполняться, а затем задокументировать ее в комментариях, чтобы другие знали, что они не должны отправлять все аргументы.
//concat(str1, str2 [,str3 [,str4 [,str5]]])
function concat(str1, str2, str3, str4, str5) {
var str = str1 + str2;
if(str3 != undefined)
str += str3;
if(str4 != undefined)
str += str4;
if(str5 != undefined)
str += str5;
return str;
}
Я также обнаружил ситуации, в которых порядок аргументов имел бы значение для нормальной функции, но иногда мне хотелось бы отправлять аргументы отдельно (т.е. я хотел бы отправлять str3 и str5, но не str4). Для этого я использую объект и проверяю известные свойства
//concat({str1:string, str2:string, str3:string, str4:string, str5:string})
//str3, str4, and str5 are optional
function concat(strngs) {
var str = strngs.str1 + strngs.str2;
if(strngs.str3 != undefined)
str += strngs.str3;
if(strngs.str4 != undefined)
str += strngs.str4;
if(strngs.str5 != undefined)
str += strngs.str5;
return str;
}