Это четвертый день из 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