Параметры функций JavaScript

Ранее в этом учебнике вы узнали, что у функций могут быть параметры:


function имяФункции(параметр1, параметр2, параметр3) {
   выполняемый код
}

Параметры функции это имена, перечисленные в определении функции. Аргументы функции это реальные значения, переданные (и полученные) в функцию.

При этом функции JavaScript не выполняют никакой проверки значений параметров (аргументов).

Правила параметров

  • Определение функции JavaScript не задает тип данных для параметров.
  • Функции JavaScript не проводят проверку типов переданных аргументов.
  • Функции JavaScript не проверяют количество полученных аргументов.

Параметры по умолчанию

Если функция вызывается с пропущенными аргументами (меньшим количеством параметров, чем декларировано в определении), то не заданные параметры устанавливаются в значение undefined.

Иногда это приемлемо, но иногда лучше присваивать параметру значение по умолчанию:


function myFunction(x, y) {
    if (y === undefined) {
          y = 0;
    }
}

В ECMAScript 2015 допускает использование параметров по умолчанию в заголовке функции:


function (a=1, b=1) {
   // код функции
}

Если функция вызывается с лишними аргументами (большим количеством параметров, чем декларировано в определении), то доступ к этим аргументам можно получить через специальный объект arguments.

Объект Arguments

У всех функций JavaScript есть встроенный объект arguments, который называется объект аргументов.

Объект аргументов содержит массив всех аргументов, переданных в функцию при ее вызове.

Благодаря этому объекту, можно легко, например, найти максимальное значение в переданном в функцию списке чисел:


x = findMax(1, 123, 500, 115, 44, 88);

function findMax() {
    var i;
    var max = -Infinity;
    for (i = 0; i < arguments.length; i++) {
        if (arguments[i] > max) {
            max = arguments[i];
        }
    }
    return max;
} 

Или создать функцию для суммирования всех переданных значений:


x = sumAll(1, 123, 500, 115, 44, 88);

function sumAll() {
    var i;
    var sum = 0;
    for (i = 0; i < arguments.length; i++) {
        sum += arguments[i];
    }
    return sum;
} 

Аргументы передаются по значению

Параметры в вызове функции — это аргументы функции.

Аргументы передаются по значению. Т.е. функция знает только значение аргумента, но не его расположение.

Если функция изменит значение аргумента, то это не изменит оригинальное значение параметра.

Изменение аргумента не заметно (не отражается) за пределами функции.

Объекты передаются по ссылке

В JavaScript ссылки на объект являются значениями.

Из-за этого, объекты ведут себя так, как будто они передаются по ссылке. Т. е. если функция изменит какое-нибудь свойство объекта, то она изменит и его оригинальное значение.

Изменение свойства объекта заметно (отражается) за пределами функции.