Переменные let и const в Javascript.

До ES6 единственным способом создать переменную в javascript было использование ключевого слова var:
var x = 10;
Начиная с ES6, есть два новых ключевых слова, let и const . Ниже приведен пример их использования:
let x = 10;
const x = 10;
Оба они делают одно и то же. они объявляют переменную «x» и присваивают ей значение «10».
Давайте посмотрим на некоторые сходства между let и const :
Переменные области действия блока
let и const позволяют объявлять переменную области видимости блока. Это означает, что всякий раз, когда вы создаете переменную, используя let и const внутри {} , эти переменные будут доступны только внутри скобок.
if (true) {
let a = 10;
}
console.log(a);
Когда механизм javascript выполняет этот код, он будет искать переменную a в области видимости, но a не будет доступен, поскольку переменная доступна только внутри блока if . Мы получим справочную ошибку. Такое же поведение будет и при использовании const вместо let .
Повторное объявление невозможно.
Всякий раз, когда вы пытаетесь повторно объявить одну и ту же переменную в пределах той же функции или области блока, вы получите сообщение об ошибке.
if (true) {
let a = 10;
let a = 10;
}
Но вы можете объявить то же имя переменной в другой области, как показано ниже:
if (true) {
let a = 10;
}
let a = 10;
Возможность поднятия let и const.
Распространенное заблуждение, что переменные let и const не поднимаются. Давайте посмотрим на пример, где мы можем доказать, что их действительно поднимают:
var age = 20;
if (true) {
console.log(age);
let age = 100;
console.log(age);
}
Предположим, что если переменные let и const не поднимаются, то приведенный выше код должен выполняться без каких-либо ошибок. Но вместо этого мы получим ошибку:

Единственное логическое объяснение этому состоит в том, что переменные let и const поднимаются.
Скопируйте приведенный выше код и запустите его в консоли вашего браузера.
Переменная, объявленная с помощью let и const, поднимается. Но поведение отличается от подъема переменной var . Когда переменная var поднимается, движок javascript инициализирует их с помощью
undefined
, но let и const остаются неинициализированными.Они будут инициализированы только тогда, когда движок javascript оценит их лексическую привязку (назначение) во время выполнения. Это означает, что вы не сможете получить доступ к переменным, пока движок не оценит их значение в том месте, где оно было объявлено в исходном коде. Это то, что мы называем временной мертвой зоной , термин, описывающий состояние, в котором переменные недоступны. Они включены в область видимости, но не инициализированы.
Разницу между let и const :
Единственное различие между ними состоит в том, что вы можете присвоить новое значение переменной let, но не переменной const.
let a = 10;
const b = 20;
a = 100;
b = 200; //TypeError: Assignment to constant variable.
Давайте посмотрим на переменную const , значение которой является ссылкой на объект.
const blogSite = {
name: "HashNode",
};
blogSite.name = "Google";
//this is allowed.
blogSite = {};
// this is not allowed
//TypeError: Assignment to constant variable.
Причина сбоя последней строки в том, что мы пытаемся обновить ссылку, присвоенную переменной const, что недопустимо.