ViktorS88
@ViktorS88
Женат, спорт, саморазвитие...

Когда название параметра такое же как и имя глобальной переменной, какие последствия? Никак не могу понять, что такое замещение переменной?

Новичок и только постигаю азы новой профессии и никак не могу нагуглить ответ на простой вопрос, что же трагичного если применить название параметра у функции такое же как у глобальной переменной и в чем смысл замещения. Просто иногда именно простые вещи достаточно сложно объяснить или понять. Моя задача именно понять. Прошу по возможности разжевать и привести пару примеров, что бы съэкономить нервы будущих коллег в профессии когда они будут читать мой код))) Как только получу ответ, обязательно отмечу его решенным. Заранее благодарю.
  • Вопрос задан
  • 152 просмотра
Решения вопроса 3
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Последствие ровно одно - эта глобальная переменная становится доступна только через window.param, а в просто param хранится значение аргумента.

Пример из жизни:
Когда вы слышите Владимир Владимирович, вы по-умолчанию думаете, скажем, про Познера. Но если у вас есть коллега с таким именем, то когда вы слышите эти слова в офисе, на ум уже приходит именно он. Это и есть замещение - в разных контекстах одно и то же имя означает разные сущности.
Ответ написан
Комментировать
@abberati
frontend-разработчик
с технической точки зрения никаких проблем нет
var foo = 25;

function bar(foo) {
  console.log(foo);
}

bar(42) // выведет "42", т.к. внутри функции foo ссылается на параметр, не на глобальную переменную. это и есть замещение


в этом примере foo снаружи и foo внутри - две абсолютно независимые переменные. снаружи foo равно 25, внутри - оно равно входному параметру 42

трагично здесь вот что: представьте, что не вы писали код и читаете его в первый раз. вы пытаетесь понять, откуда взялось foo, которое используется в конце длинной функции. начинаете искать по файлу и обнаруживаете, что есть несколько несвязанных между собой переменных, имеющих одно и то же имя. в какой же из этих переменных то самое значение, которое выводится в bar?

var foo = 25;
// 20-30 строк кода
function makeMeFun() {
  // 20-40 строк кода
  console.log(foo);
}

function bar(bez, buz, kek, lol, cheburek, foo) {
  // 20-40 строк кода
  console.log(foo);
}

bar(42) // что мы получим на выходе? а чёрт его разберёт


именно поэтому одна из двух самых сложных задач в программировании - придумывание имён
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы