Три различия между let и var

Основной текст заметки

Вот 3 основных различия в использовании let и var для создания переменных.

Оператор let объявляет локальную переменную с областью видимости внутри блока. Оператор блока используется для группировки операторов. Например

{
   console.log("I am inside a block");
}

Отличие 1: Область видимости

Основное различие между var и let заключается в том, что область действия var является либо глобальной, либо локальной для объявленной функции, тогда как область действия let - это блок, в котором она объявлена.

Пример:

{
   var x = 10; // create variable in global scope
   let y = 20; // create variable in local scope
}    
console.log(x); // 10
console.log(y); // ReferenceError: y is not defined

Отличие 2: Доступ к значению

Когда мы создаем переменную с помощью оператора var, мы можем получить доступ к значению (неопределенному по умолчанию) до того, как оно будет объявлено переменной.

console.log(x); // undefined
var x = 10;
console.log(x); // 10

Мы также можем сделать так:

var k = k ;

Приведенный выше код сначала проверит, есть ли какая-либо переменная, объявленная как k да, у нас есть объявление, поэтому он создаст переменную k со значением undefined, прежде чем выполнить var k = k; теперь переменная создана, а затем значение k(undefined) будет снова присвоено k. Приведенный выше код похож на:

z = 10; var z =z;

Но мы не можем сделать то же самое в let

console.log(y); // ReferenceError: y is not defined
let y = 10;

Также не получится сделать

let m = m; // Reference error m is not defined

Отличие 3: Привязка к глобальному объекту

Когда мы объявляем переменную с помощью var, она создает свойство глобального объекта.

var a = 10;
console.log(this.a); // 10
console.log(window.a); // 10
console.log(a); //10
console.log(globalThis.a); // 10

Но в let мы не можем сделать то же самое, потому что let не создает свойство для глобального объекта.

let z= 10;
console.log(z); //10
console.log(this.z); // undefined
console.log(window.z); // undefined
console.log(globalThis.z); // undefined

Заметка написана: 21.07.2020

Теги заметки: JavaScript, JS