Вызов функций с переменным числом аргументов
Для объекта определен также объект типа Array с именем arguments. Этот объект, доступный только в теле функции, позволяет обрабатывать вызов функции для разного количества аргументов.
Свойство length объекта arguments содержит количество аргументов, переданных в функцию при текущем вызове, а сам объект содержит массив аргументов, переданных в функцию при текущем вызове.
Пример 4.4.59. Вызов функции с переменным числом аргументов:
function addNumbers(a, b)
{
// Если переданное в функцию количество аргументов
// меньше заданного в определении функции
if(arguments.length < addNumbers.length)
{
// Вывод сообщения
alert("Количество аргументов при вызове " +
"функции addNumbers меньше " + addNumbers.length);
// Возврат нечислового значения NaN
return Number.NaN;
}
// Начальное значение суммы
sum = 0;
// Цикл по заданным аргументам
for(i = 0; i < arguments.length; i++)
{
// Получение текущего аргумента
currentArg = arguments[i];
// Преобразование аргумента в числовую форму
currentNumber = new Number(currentArg)
// Если аргумент нечисловой
if(isNaN(currentNumber))
// Вывод сообщения
alert("Нечисловой аргумент '" +
currentArg + "' игнорируется");
else
// Увеличение суммы на значение
// текущего аргумента
sum += currentNumber;
}
// Возврат значения суммы
return sum;
}
…
// Вызовы функции addNumbers
// с разным количеством аргументов
sum0 = addNumbers(2);
sum1 = addNumbers(3,5,7);
sum2 = addNumbers(8,"-5.3");
sum3 = addNumbers(8,"x12", "0x15", 32);
// Вывод результатов
alert("sum0=" + sum0 + " sum1=" + sum1 +
" sum2=" + sum2 + " sum3=" + sum3);
В этом фрагменте сценария задана функция addNumbers(), которая переводит заданные при вызове аргументы в числовую форму и возвращает их сумму. Если среди аргументов встречается аргумент, который не может быть переведен в числовую форму, выдается предупреждающее сообщение и аргумент игнорируется. Если задано меньше аргументов, чем указано в определении функции, возвращается значение NaN.
Далее во фрагменте вызывается функция с разным числом аргументов и выводятся сообщения, а также результаты суммирования: