Если вы откладывали изучение этого вопроса (как и я), это для вас

Первоначально опубликовано на 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, чтобы узнать больше!

Приятного вам дня!