Как работает этa function?

У меня есть вот такой код:

function showMessage(from, text) {
  from = '*' + from + '*';
  console.log(from);
}

let from = 10;
showMessage(from); //--> *10*
console.log(from);

Я читаю здесь это:

...переданные значения копируются в локальные переменные... Затем они используются в теле функции.

Вопрос: неужели значение аргумента может быть перезаписано внешней одноименной переменной? Получается, что локальная переменная получает значение глобальной?

Также непонятны такие слова по поводу этого отрезка кода на том же сайте:

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

О какой копии идёт речь?


Ответы (1 шт):

Автор решения: OPTIMUS PRIME

Вопрос: неужели значение аргумента может быть перезаписано внешней одноименной переменной? Получается, что локальная переменная получает значение глобальной?

function showMessage(from, text) {
  from = '*' + from + '*';
  console.log(from);
}

При выполнении этого кода создается функция, которая пока находится где-то в памяти компьютера. Никаких «Значений аргументов» сейчас не существует.

let from = 10;

Создается переменная from со значением 10. От того, что где-то внутри функций будет переменная / параметр с таким же названием, ничего не изменится.

showMessage(from);

Здесь функция вызывается, и ровно в этот момент, параметр функции from получает своё значение от внешней переменной from10 (потому что он передан в виде аргумента, в оператор вызова функции (), а не потому что названия одинаковые). При этом, дальнейшие изменения параметра from внутри функции никак не влияют на значение глобальной from.

Одинаковые имена могут быть использованы просто для удобства. Функция будет работать и в таком виде:

function showMessage(msg) {
  msg = '*' + msg + '*';
  console.log(msg);
}

let from = 10;

showMessage(from); // msg получает значение from, оно же, 10
showMessage(1000); // напрямую получает значение - число
showMessage(" - text - ");
showMessage(); // ничего не передано, значения параметров по умолчанию - undefined

→ Ссылка