Переменные JavaScript: понимание разницы между «let» и «var»

Разница между letи varв JavaScript связана с их областью действия и поведением при подъеме.

  1. Область действия: при использовании varпеременная имеет область действия функции, то есть она доступна во всей функции, в которой она объявлена. С другой стороны, letимеет блочную область действия, что означает, что он ограничен блоком (парой фигурных скобок), в котором он определен.
function example() {
  if (true) {
    var x = 10;
    let y = 20;
  }
  console.log(x); // 10
  console.log(y); // ReferenceError: y is not defined
}
example();

В приведенном выше примере x, объявленный с помощью var, доступен за пределами блока if, тогда как yобъявлен с letдоступен только внутри блока.

  1. Подъем: переменные, объявленные с помощью var, поднимаются в начало своей области видимости и могут использоваться до их объявления. Это означает, что вы можете получать доступ к переменным varи присваивать им значения еще до того, как они появятся в коде. Однако их значения будут неопределенными, пока они не будут присвоены.
console.log(x); // undefined
var x = 10;
console.log(y); // ReferenceError: y is not defined
let y = 20;

В приведенном выше примере xподнят наверх, поэтому он определен, но имеет значение undefined. С другой стороны, yне поднимается, поэтому ссылка на него до его объявления приводит к ReferenceError.

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