Аргументы функции по умолчанию в JavaScript

Javascript 15 февраля 2015 г., 7:22

Общие моменты

Когда число аргументов в вызове функции меньше числа объявленных параметров, недостающие аргументы получают значение undefined:

function optional(d) {
"undefined" === typeof d && (d = 0);
}


Другой способ:

function optional(d) {
d = d || 0;
}


Если число аргументов в вызове функции превышает число имен параметров, функция не может напрямую обратиться к неименованным значениям. На помощь приходит объект Arguments. В теле функции «переменная» arguments ссылается на объект Arguments, присутствующий в вызове. Объект Arguments позволяет извлекать переданные функции значения по их индексам, а не по именам:

function optional(d) {
console.log(arguments.length);
}


Практическое применение переменного числа аргументов функции, поиск наибольшего значения:

function maxNumber()
{
var m = Number.NEGATIVE_INFINITY;
for(var i = 0; i < arguments.length; i++)
if (arguments[i] > m) m = arguments[i];
return m;
}
var largest = maxNumber(1, 10, 100, 2, 3, 1000, 4, 5, 10000, 6); // 10000


arguments является обычным объектом Javascript:

Object.getPrototypeOf(arguments) == Object.prototype


Превратить его в массив можно так:

var args = Array.prototype.slice.call(arguments, 0);


Содержимое arguments

arguments.length — количество аргументов, переданных в функцию.

arguments.callee — ссылка на функцию в контексте которой создан arguments:

function func() {
console.log(arguments.callee === func); // true
}


Так можно проверить, передано ли правильное количество элементов, или нет:

function func(foo, bar, qux) {
return arguments.callee.length === arguments.length;
}


Кстати, у каждой функции тоже есть свойство length, которое указывает на количество элементов объявленных в её заголовке:

function func(foo) {};
console.log(func.length); // 1


Для упрощения работы с аргументами есть библиотека, позволяющая контролировать число входящих аргументов, соответствие типам, управлять значениями по умолчанию и т.д.

Теги: javascript tutorial