Локальные переменные
Функция может содержать локальные переменные. Такие переменные видны только внутри функции:
function showMessage() {
var message = 'Привет, я - Вася!'; // локальная переменная
console.log( message );
}
showMessage(); // 'Привет, я - Вася!'
console.log( message ); // <-- будет ошибка, т.к. переменная видна только внутри
Внешние переменные
Функция может обратиться ко внешней переменной.
Доступ при таком обращении возможен не только на чтение, но и на запись. При этом, так как переменная внешняя, то изменения будут видны и снаружи функции:
var userName = 'Вася';
function showMessage() {
userName = 'Петя'; // (1) присвоение во внешнюю переменную
var message = 'Привет, я ' + userName;
consol.log( message );
}
showMessage();
console.log( userName ); // Петя, значение внешней переменной изменено функцией
Конечно, если бы внутри функции, в строке(1)
, была бы объявлена своя локальная переменная var userName
, то все обращения использовали бы её, и внешняя переменная осталась бы неизменной.
Параметры и аргументы функции
Параметры функции -
- список идентификаторов (и возможно сопоставленных им значений по умолчанию и типов данных), заданный в момент объявления.
- Параметры удобно рассматривать как объявления локальных переменных, каждая из которых инициализируются в момент вызова соответствующим значением из списка аргументов (или значением по умолчанию).
Аргументы (входные данные) функции -
- произвольный список значений, передаваемых функции в момент вызова.
______________________________________________________________
Типы аргументов функции могут быть как примитивами (строки, числа, boolean), так и объектами (включая массивы или функции):
Значения-примитивы передаются в функции по значению. Значение копируется, так что если функция изменит значение параметра, это изменение не будет иметь внешнего эффекта.
Объекты передаются в функцию по ссылке: переприсваивание самой ссылки также не имеет внешнего эффекта, но если функция изменяет свойства объекта, то эти изменения будут видимы вне функции (побочный эффект).
Аргументы по умолчанию
Функцию можно вызвать с любым количеством аргументов. Если параметр не передан при вызове – он считается равнымundefined
.
Например, функцию показа сообщенияshowMessage(from, text)
можно вызвать с одним аргументом:
showMessage("Маша");
При этом можно проверить, и если параметр не передан – присвоить ему значение «по умолчанию»:
function showMessage(from, text) {
if (text === undefined) {
text = 'текст не передан';
}
console.log( from + ": " + text );
}
showMessage("Маша", "Привет!"); // Маша: Привет!
showMessage("Маша"); // Маша: текст не передан
При объявлении функции необязательные аргументы, как правило, располагают в конце списка.
Для указания значения «по умолчанию», то есть, такого, которое используется, если аргумент не указан, используется два способа:
Можно проверить, равен ли аргумент
undefined
, и если да – то записать в него значение по умолчанию. Этот способ продемонстрирован в примере выше.Использовать оператор
||
:function showMessage(from, text) { text = text || 'текст не передан'; ... }
Второй способ считает, что аргумент отсутствует, если передана пустая строка,
0
, или вообще любое значение, которое в логическом контексте являетсяfalse
.
Если аргументов передано больше, чем надо, напримерshowMessage("Маша", "привет", 1, 2, 3)
, то ошибки не будет. Но, чтобы получить такие «лишние» аргументы, нужно будет прочитать их из специального объектаarguments.