Это четвертый день из 100 дней моего изучения javascript, и сегодня я узнал о ключевом слове javascript let.

Объявление let объявляет локальную переменную блочной области.

let a=100;
console.log(a);       //100

if(true) {
  let b= 200;
  console.log(b);     //200
}
console.log(b);       //Error

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

var x = "global";
let y = "global";
console.log(this.x); // "global"
console.log(this.y); // undefined

Повторное объявление одной и той же переменной в той же функции или области блока вызывает SyntaxError.

var a=100;
console.log(a);     //100
var a=90;          // no error even with duplicate declaration 
console.log(a)     //90

let b=100;
console.log(b);     //100
let b=90;           //SyntaxError: Identifier 'b' has already been declared
console.log(b)     

Вы даже не можете объявить переменную с var с тем же именем, что и let в той же области видимости.

let c= 1;
{
  var c= 2; // SyntaxError: Identifier 'c' has already been declared
}

Доступ к let возможен только после достижения его объявления. По этой причине объявления let обычно считаются неподнятыми.

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

b =5;
let b;         //ReferenceError: Cannot access 'b' before initialization
console.log(b)

Временная мертвая зона (TDZ):

Говорят, что переменная let находится во "временной мертвой зоне" с начала блока до тех пор, пока выполнение кода не достигнет строки, где переменная объявлена ​​и инициализирована.

Находясь внутри TDZ, переменная не была инициализирована значением, и любая попытка доступа к ней приведет к ошибке ReferenceError. Переменная инициализируется значением, когда выполнение достигает строки кода, где она была объявлена. Если при объявлении переменной не было указано начальное значение, оно будет инициализировано значением undefined.

 // TDZ starts at beginning of scope 
 console.log(num1); // undefined
 console.log(num2); // ReferenceError
 var num1= 1;
 let num2= 2; // End of TDZ (for num2)

Использование оператора typeof для переменной let в ее TDZ вызовет ошибку ReferenceError.

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

console.log(typeof y);  // undefined
var y = 10;

Время теста……

Хорошо, я полагаю, теперь у вас достаточно идей о let. Можете ли вы угадать результат для приведенного ниже кода?

function test() {
  var z= 50;
  if (z) {
    let z= z+ 55; 
  }
}
test();

Дайте мне знать ваш ответ. (В конце статьи есть кнопка ответа).

Это все на сегодня. Догонят завтра.

Спасибо за прочтение. Пожалуйста, хлопните в ладоши, если вам понравилась статья.

Продолжай учиться! #100daysofjavascript