Если вы откладывали изучение этого вопроса (как и я), это для вас
Первоначально опубликовано на Hashnode.
Одной из функций, представленных в ES6 (ECMAScript 2015), были let и const, которые вызвали некоторую путаницу. Если мы уже могли объявлять переменные с помощью var, зачем нам let? В чем разница между ними? Давайте узнаем это!
Легендарная битва: let vs var
1 Область применения
Переменные, объявленные с помощью var, называются функциональными. Они известны только в теле функции, в которой они были объявлены:
Другой пример:
Переменные, объявленные с помощью let, называются блочными. Они известны только внутри блока, в котором они были объявлены:
Примечание. Блок - это код между фигурными скобками {}
2) Подъем
А вдруг…
Мы бы не ожидали такого результата, потому что он не имеет смысла, как, черт возьми, он распознал бы переменную something, если бы она еще не была объявлена?
Ответ на это подъем.
Подъем в JavaScript - это плотная тема, о которой я напишу в отдельной статье, а пока кратко ее резюмирую.
Подъем - это поведение механизма JavaScript, который распознает переменные и функции до их инициализации.
Вы можете изобразить это как перемещение всех объявлений в верхнюю часть кода, но это не то, что происходит, ваш код не перемещается, это просто способ для вас это легче понять!
В приведенном выше примере мы замечаем, что переменная something была инициализирована значением undefined до достижения инициализации (значением «Banana boy»), это именно то, что делает подъем .
Это «эквивалент»:
Теперь, когда дело касается переменных, объявленных с помощью let, мы не встречаем такого результата:
Мы не можем получить доступ или использовать переменные, объявленные с помощью let до инициализации.
Значит ли это, что их не поднимают?
Нет. Их действительно поднимают, но другим способом. Я объясню, как это происходит, в отдельной статье, чтобы было проще.
В конце концов:
- Переменные, определенные с помощью var, всегда известны внутри функции, в которой они определены, до объявления (с помощью undefined) и после него (с присвоенным вами значением).
- Переменные, определенные с помощью let, известны внутри блока, в котором они определены, только ПОСЛЕ объявления.
3) Глобальное свойство объекта
Когда переменная определяется глобально с помощью var, она становится свойством объекта окна:
Однако это не относится к глобальным переменным, определенным с помощью let:
4) Новое определение
Вы можете переопределить ту же переменную с помощью var.
Но когда вы пытаетесь сделать это с помощью let, возникает ошибка SyntaxError:
Так почему же был введен «пусть»?
- Объявление переменных с помощью var подвержено ошибкам. Когда мы используем переменную, мы хотим, чтобы она «оставалась» только тогда, когда это необходимо (другими словами, мы хотим, чтобы она существовала только внутри блока, в котором она была объявлена). Вот почему let объявляет переменные с блочной областью видимости. Наш код становится менее подверженным ошибкам.
- Прикрепить переменные к объекту window (объявив их глобально с помощью var) проблематично. При работе с разными модулями возможны конфликты (разные переменные с одинаковыми именами, в результате чего одна переопределяет другую).
- Нет причин для повторного объявления переменных, это делает код более запутанным и не является разумным решением. let не позволяет вам этого делать (наполовину умышленный каламбур).
Спасибо за чтение!
В этом было основное различие между var и let, надеюсь, вы кое-что узнали!
Любые отзывы или конструктивная критика приветствуются и приветствуются, поэтому, пожалуйста, поделитесь своим мнением в комментариях, чтобы я мог улучшить качество. Спасибо за чтение ❤️!
Следите за моим блогом и моим Twitter, чтобы узнать больше!
Приятного вам дня!