Как работает этa function?
У меня есть вот такой код:
function showMessage(from, text) {
from = '*' + from + '*';
console.log(from);
}
let from = 10;
showMessage(from); //--> *10*
console.log(from);
Я читаю здесь это:
...переданные значения копируются в локальные переменные... Затем они используются в теле функции.
Вопрос: неужели значение аргумента может быть перезаписано внешней одноименной переменной? Получается, что локальная переменная получает значение глобальной?
Также непонятны такие слова по поводу этого отрезка кода на том же сайте:
Обратите внимание: функция изменяет значение from, но это изменение не видно снаружи. Функция всегда получает только копию значения.
О какой копии идёт речь?
Ответы (1 шт):
Вопрос: неужели значение аргумента может быть перезаписано внешней одноименной переменной? Получается, что локальная переменная получает значение глобальной?
function showMessage(from, text) {
from = '*' + from + '*';
console.log(from);
}
При выполнении этого кода создается функция, которая пока находится где-то в памяти компьютера. Никаких «Значений аргументов» сейчас не существует.
let from = 10;
Создается переменная from со значением 10. От того, что где-то внутри функций будет переменная / параметр с таким же названием, ничего не изменится.
showMessage(from);
Здесь функция вызывается, и ровно в этот момент, параметр функции from получает своё значение от внешней переменной from — 10 (потому что он передан в виде аргумента, в оператор вызова функции (), а не потому что названия одинаковые). При этом, дальнейшие изменения параметра from внутри функции никак не влияют на значение глобальной from.
Одинаковые имена могут быть использованы просто для удобства. Функция будет работать и в таком виде:
function showMessage(msg) {
msg = '*' + msg + '*';
console.log(msg);
}
let from = 10;
showMessage(from); // msg получает значение from, оно же, 10
showMessage(1000); // напрямую получает значение - число
showMessage(" - text - ");
showMessage(); // ничего не передано, значения параметров по умолчанию - undefined