В чем разница между использованием let и var в JavaScript?

Когда следует использовать let over var? И почему? Давай выясним!

В современном JavaScript у нас есть 3 способа объявить переменную и присвоить ей значение:

  • const
  • let
  • var

При работе с переменными в JavaScript я всегда по умолчанию используюconst. Это гарантирует, что значение нельзя переназначить, и поэтому его безопаснее использовать.

Но когда мне понадобится повторно объявить переменную позже, я всегда используюlet.

Я не использовалvarгодами, и для меня это просто для целей обратной совместимости, и я всегда приподнимаю бровь, когда вижу, что он используется.

Почему?

Первый,letимеетразумный анализ.

Та же область видимости, которая используется более или менее во всех популярных языках программирования, блочная область видимости, диктует, что переменные, объявленные с использованиемletпривязаны к ближайшему блоку.

varвместо этого немного более странно, так как у него есть область видимости функции, что означает, что переменные, объявленные с использованиемvarограничены ближайшей функцией.

Это имеет практическое значение. Например, переменная объявляется внутриifили используется какforитератор цикла. С помощьюletделает его локальным для этих 2 блоков. С помощьюvarоднако позволяет переменной быть доступной за пределами этого блока, что может привести к ошибкам.

Всегда используйте инструмент, который дает вам наименьшую мощность, чтобы убедиться, что у вас есть максимальный контроль над ним.С большой властью приходит большая ответственность.

Еще одна причина предпочестьletявляетсяподъем. Нравитьсяconst,letпеременные не поднимаются, но они инициализируются при оценке.

varвместо этого переменные поднимаются наверх функции, и поэтому они доступны даже в строкахпередих декларация. Странно, правда?

Третья причина: когда вы объявляетеletпеременная с тем же именем, что и уже существующая, вы получите ошибку (вСтрогий режим).

Наконец, еще одно большое отличие: если вы объявитеvarпеременная вне какой-либо функции, она присваиваетсяглобальный объект, что значитwindowвнутри браузера.letне работает таким образом; переменная доступна, но не привязана к глобальному объекту, поэтому недоступна извне вашего файла.

Скачать мою бесплатнуюРуководство для начинающих по JavaScript


Больше руководств по js: