JavaScript: Параметры и аргументы функции
Параметры функции играют роль локальных переменных в теле функции. При указании параметров функции ключевое слово var
или let
использовать не нужно, JavaScript объявляет их в качестве локальных переменные автоматически. Параметров может быть указано любое количество:
function foo(a, b, c) { ... } // a, b, c – параметры функции
При вызове функции, ей могут передаваться значения, которыми будут инициализированы параметры. Значения, которые передаются при вызове функции называются аргументами. Аргументы, указываются через запятую:
function foo(a, b) { var sum = a + b; alert(sum); } foo(5, 7); // 12
Когда при вызове функции ей передаётся список аргументов, эти аргументы присваиваются параметрам функции в том порядке, в каком они указаны: первый аргумент присваивается первому параметру, второй аргумент – второму параметру и т. д.
Если число аргументов отличается от числа параметров, то никакой ошибки не происходит. В JavaScript подобная ситуация разрешается следующим образом:
- Если при вызове функции ей передаётся больше аргументов, чем задано параметров, "лишние" аргументы просто не присваиваются параметрам. Допустим, имеется следующее объявление функции:
function foo(a, b, c) { // ... }
Если при её вызове указатьfoo(1, 2, 3, 4)
, то аргументы1
,2
и3
будут присвоены параметрамa
,b
иc
соответственно. В то же время аргумент4
не будут присвоен ни одному из параметров данной функции. - Если функция имеет больше параметров, чем передано ей аргументов, то параметрам без соответствующих аргументов присваивается значение undefined.
Все функции имеют два неявных параметра: arguments
и this
. Под словом неявный подразумевается, что эти параметры не перечисляются явно в объявлении функции. Эти параметры также неявно инициализируются при вызове функции. К ним можно обращаться в самой функции так же, как и к любым другим явно установленным параметрам.
Значения параметров по умолчанию
Параметры функции можно инициализировать значениями по умолчанию, которые будут использоваться в том случае, если параметры не были инициализированы аргументами при вызове функции:
function foo(greeting = "Привет", name = "Гость") { console.log(greeting + ", " + name + "!"); } foo(); // "Привет, Гость!"
Передача значения undefined
в качестве аргумента воспринимается как отсутствие аргумента:
function foo(greeting = "Привет", name = "Гость") { console.log(greeting + ", " + name + "!"); } foo(undefined, "Гомер"); // "Привет, Гомер!"
Функция, в которой используются параметры со значениями по умолчанию, всегда работает как в строгом режиме, даже если он не был включен:
function foo(a, b = 2) { console.log(a === arguments[0]); console.log(b === arguments[1]); } foo(1); // true // false
Так как в функцию передаётся только один аргумент, arguments[1]
имеет значение undefined
, поэтому сравнение console.log(b === arguments[1]);
в результате даёт false
.
Если в функции используются параметры со значениями по умолчанию, то использование объявления строгого режима внутри функции приведёт к синтаксической ошибке:
function foo(a = 1) { "use strict"; // Ошибка }
Значением по умолчанию может быть как простое, так и сложное выражение:
function foo(a = 1, b = 2 + 2) { console.log(a, b); } foo(1); // 1 4
Значение предыдущего параметра можно использовать в качестве значения по умолчанию для любого из последующих параметров:
function foo(a, b = a) { console.log(a, b); } foo(1); // 1 1
Попытка использовать значение последующего параметра в качестве значения по умолчанию для предшествующего параметра вызовет ошибку:
function foo(a = b, b) { console.log(a, b); } foo(undefined, 1); // Ошибка
Параметры создаются в момент вызова функции в том порядке, в котором они следуют в определении функции. Каждый параметр создаётся по аналогии объявления переменной с помощью ключевого слова let. Это означает, что использование параметра до того как он был создан вызовет ошибку.
Попытка использовать значение переменной, объявленной в теле функции, в качестве значения по умолчанию для параметров функции, также вызовет ошибку:
function foo(a = b) { var b = 5; console.log(a); } foo(); // Ошибка
Дополнительный параметр
Параметр с префиксом ...
называется дополнительным (или необязательным). Дополнительный параметр указывается в качестве последнего параметра. Дополнительный параметр – это массив, в который сохраняются лишние аргументы, когда количество переданных аргументов превышает количество параметров:
function foo(a, b, ...args) { console.log(args); } foo(1, 2, 3, 4, 5); // 3, 4, 5
С этой темой смотрят: