Итак, дайте угадаю, вы впервые изучали javascript и запутались между этими разными типами объявления переменных, а потом погуглили. Итак, привет, вам повезло, вы находитесь в идеальном месте (мм… или, может быть, на странице) для решения ваших вопросов.

Есть три способа объявить переменную в javascript

  • вар
  • позволять
  • константа

var был нашим старым добрым другом, а ключевые слова let и const появились в ES6 (ES2015).

В этой статье мы обсудим, в чем разница между этими ключевыми словами, как они действуют по-разному и почему возникла необходимость в let и const, проанализировав их по следующим пунктам.

  • Декларация
  • Объем
  • Подъем

DECLARATION с разными ключевыми словами отличается или, скажем так, объявленная переменная действует по-разному, переменные с «var» и «let» могут быть объявлены без инициализации, тогда как с «const» это не так. .

Переменные с «const» должны быть инициализированы объявлением, иначе будет выдана ошибка.

И, как вы могли догадаться, «const» означает константу, что объясняет тот факт, что ее нельзя переназначить, она используется для создания переменной, значение которой значение не изменится после присвоения, или мы не хотим, чтобы значение изменялось. Объявление const создает ссылку только для чтения на значение. Это не означает, что значение, которое она содержит, является неизменным — просто идентификатор переменной нельзя переназначить. Однако, если константа является объектом или массивом, ее свойства или элементы могут быть обновлены или удалены. В то время как «let» и «var» можно без проблем переназначить.

Говоря о ОБЛАСТИ ОБЛАСТИ, я надеюсь, вы знаете, что такое область действия, глобальная область действия и область действия блока, если Нет, нет проблем, позвольте мне быстро сказать вам об этом, и тогда мы продолжим.

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

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

Переменная имеет область действия блока, когда она объявлена ​​внутри открывающей и закрывающей фигурных скобок, например, в операторе if-else.

Итак, это все, что касается областей видимости, а теперь вернемся к нашей теме обсуждения. Вкратце, переменные «var» являются глобальными и ограничены областью видимости функций, тогда как переменные «let» и «const» являются блокируемыми.

Ранее JavaScript не блокировал область действия, потому что до ES6 переменные объявлялись с помощью ключевого слова «var», а переменные с «var» не блокировали область действия, к ним можно было получить доступ. снаружи, даже если он объявлен внутри блока, но javascript также хотел заблокировать область действия, поскольку он имеет много преимуществ, и эта проблема была решена с помощью более нового синтаксиса для объявления переменных, т.е. пусть и константа

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

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

Теперь давайте поговорим о том, как разные переменные HOISTED в JavaScript, все три объявления в javascript поднимаются, но тем не менее они действуют по-разному, на первый взгляд кажется, что это просто «var» переменные подняты, но это не так.

Переменные с «var» обрабатываются перед выполнением любого кода, во время этапа создания контекста выполнения, объявление переменной var в любом месте кода эквивалентно объявлению ее вверху. Первоначально они инициализируются значением undefined и, следовательно, к ним можно получить доступ до оператора объявления.

Итак, как вы можете видеть, я могу получить доступ к приветствию перед его объявлением, и оно было изначально инициализировано значением undefined, и после того, как выполнение кода достигает строки, где объявлена ​​и инициализирована переменная, значение приветствия становится «Hello». Но делая то же самое с переменной let или const, будет выброшена ошибка ReferenceError. Это связано с тем, что переменная let или const находится в 'временной мертвой зоне' (TDZ) с начала блока до тех пор, пока выполнение кода не достигнет строки, где переменная объявлена ​​и инициализирована. Находясь внутри TDZ, переменная не была инициализирована значением, и любая попытка доступа к ней приведет к ошибке ReferenceError.

Как вы можете видеть в приведенном выше коде, когда я пытался получить доступ к приветствию перед объявлением, он выдавал ошибку ссылки, которая до этой строки выполнение кода не проходило через строку, где переменная объявлена ​​и инициализирована, означает, что переменная var не вышла временной мертвой зоны, но когда выполнение кода проходит через эту строку, оно печатает приветствие. Таким образом, переменные let и const также поднимаются, но к ним нельзя получить доступ, поскольку они являются временной мертвой зоной, пока они не будут инициализированы в коде. Функции и переменные поднимаются по-разному, но это совсем другая тема, на этом мы можем завершить обсуждение let vs const vs var в javascript.