Параметры
Мы можем передать внутрь функции любую информацию, используя параметры (также называемые аргументами функции).
В нижеприведённом примере функции передаются два параметра: from
и text
.
function showMessage(from, text) { // аргументы: from, text
alert(from + ': ' + text);
}
showMessage('Аня', 'Привет!'); // Аня: Привет! (*)
showMessage('Аня', "Как дела?"); // Аня: Как дела? (**)
Когда функция вызывается в строках (*)
и (**)
, переданные значения копируются в локальные переменные from
и text
. Затем они используются в теле функции.
Вот ещё один пример: у нас есть переменная from
, и мы передаём её функции. Обратите внимание: функция изменяет значение from
, но это изменение не видно снаружи. Функция всегда получает только копию значения:
function showMessage(from, text) {
from = '*' + from + '*'; // немного украсим "from"
alert( from + ': ' + text );
}
let from = "Аня";
showMessage(from, "Привет"); // *Аня*: Привет
// значение "from" осталось прежним, функция изменила значение локальной переменной
alert( from ); // Аня
Параметры по умолчанию
Если параметр не указан, то его значением становится undefined
.
Например, вышеупомянутая функция showMessage(from, text)
может быть вызвана с одним аргументом:
showMessage("Аня");
Это не приведёт к ошибке. Такой вызов выведет "Аня: undefined"
. В вызове не указан параметр text
, поэтому предполагается, что text === undefined
.
Если мы хотим задать параметру text
значение по умолчанию, мы должны указать его после =
:
function showMessage(from, text = "текст не добавлен") {
alert( from + ": " + text );
}
showMessage("Аня"); // Аня: текст не добавлен
Теперь, если параметр text
не указан, его значением будет "текст не добавлен"
В данном случае "текст не добавлен"
это строка, но на её месте могло бы быть и более сложное выражение, которое бы вычислялось и присваивалось при отсутствии параметра. Например:
function showMessage(from, text = anotherFunction()) {
// anotherFunction() выполнится только если не передан text
// результатом будет значение text
}
Вычисление параметров по умолчанию
В JavaScript параметры по умолчанию вычисляются каждый раз, когда функция вызывается без соответствующего параметра.
В примере выше anotherFunction()
будет вызываться каждый раз, когда showMessage()
вызывается без параметра text
.
Использование параметров по умолчанию в ранних версиях JavaScript
Ранние версии JavaScript не поддерживали параметры по умолчанию. Поэтому существуют альтернативные способы, которые могут встречаться в старых скриптах.
Например, явная проверка на undefined
:
function showMessage(from, text) {
if (text === undefined) {
text = 'текст не добавлен';
}
alert( from + ": " + text );
}
…Или с помощью оператора ||
:
function showMessage(from, text) {
// Если значение text ложно, тогда присвоить параметру text значение по умолчанию
text = text || 'текст не добавлен';
...
}