Здравствуйте, разработчики JavaScript! Это очень короткая и точная статья, в которой указаны фактические различия между let и var, о которых должен знать разработчик JavaScript.

Здесь я буду обсуждать следующие темы о различиях между let и var:

  1. Переменный подъем
  2. Сфера
  3. Связывание верхнего уровня
  4. Правила повторного объявления

Подъем переменных выполняется для переменных, объявленных с помощью var, а не let

Вопрос: Что означает подъем?

Ответ: Подъем - это механизм в javascript, в котором все переменные, объявленные с помощью var, и объявленные функции перемещаются в верхнюю часть своей области видимости до начала фактического выполнения кода. Если вам интересно, почему вы могли вызывать функции до объявления. Это была причина.

Итак, для var происходит следующее: вы можете использовать переменную перед объявлением, и движок не выдаст ошибку при выполнении кода.

Пример кода (var):

console.log(a);
var a=10;
console.log(a);

После подъема:

var a;
console.log(a);
a=10;
console.log(a);

Результат

undefined
10

Пример кода (пусть):

console.log(a);
let a=10;

После подъема:

Same code as above

Результат

Line 1: ReferenceError: Cannot access 'a' before initialization

var ограничен непосредственной внешней функцией.

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

Пример кода (пусть):

for(let i=0;i<10;i++) {
console.log(i); //i is visible thus is logged in the console as 0,1,2,….,9
}
console.log(i); //throws an error as “i is not defined” because i is not visible

Пример кода (var):

for(var i=0; i<10; i++) {
console.log(i); //i is visible thus is logged in the console as 0,1,2,….,9
}
console.log(i); //i is visible here too. thus is logged as 10.

var на верхнем уровне привязывается к глобальному объекту.

Var на верхнем уровне привязывается к глобальному объекту (объекту окна), а let - нет.

Пример :

var x = ‘global’;
let y = ‘global’;
console.log(this.x); // “global”
console.log(this.y); // undefined

Повторное заявление

В случае var повторное объявление возможно, а в случае let повторное объявление невозможно.

Пример кода:

var foo = “foo1”;
var foo = “foo2”; // No problem, ‘foo’ is replaced.
let bar = “bar1”;
let bar = “bar2”; // SyntaxError: Identifier ‘bar’ has already been declared