Здравствуйте, разработчики JavaScript! Это очень короткая и точная статья, в которой указаны фактические различия между let и var, о которых должен знать разработчик JavaScript.
Здесь я буду обсуждать следующие темы о различиях между let и var:
- Переменный подъем
- Сфера
- Связывание верхнего уровня
- Правила повторного объявления
Подъем переменных выполняется для переменных, объявленных с помощью 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