You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
console.log(x); // ReferenceError: Cannot access 'x' before initialization
11
+
*/!*
12
+
let x =2;
13
+
}
14
+
15
+
func();
16
+
```
17
+
18
+
В этом примере мы можем наблюдать характерную разницу между "несуществующей" и "неинициализированной" ("uninitialized") переменной.
19
+
20
+
Как вы могли прочитать в статье [](info:closure), переменная находиться в "неинициализированном" ("uninitialized") состоянии с момента входа в блок кода (или функцию). И остается неинициализированной до соответствующего оператора `let`.
21
+
22
+
Другими словами, переменная технически существует, но не может быть использована до `let`.
23
+
24
+
Приведенный выше код демонстрирует это.
25
+
26
+
```js
27
+
functionfunc() {
28
+
*!*
29
+
// локальная переменная x известна движку с самого начала выполнения функции,
30
+
// но она неинициализированна ("uninitialized") до let ("мёртвая зона")
31
+
// следовательно, ошибка
32
+
*/!*
33
+
34
+
console.log(x); // ReferenceError: Cannot access 'x' before initialization
35
+
36
+
let x =2;
37
+
}
38
+
```
39
+
40
+
Эту зону временной непригодности переменной (от начала блока кода до `let`) иногда называют "мёртвой зоной".
0 commit comments