Skip to content

Commit 2a797bc

Browse files
authored
Добавление решения задачи "Видна ли переменная?"
1 parent c0c15ae commit 2a797bc

File tree

1 file changed

+40
-0
lines changed
  • 1-js/06-advanced-functions/03-closure/7-let-scope

1 file changed

+40
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
Ответ: **ошибка**.
2+
3+
Попробуйте запустить этот код:
4+
5+
```js run
6+
let x = 1;
7+
8+
function func() {
9+
*!*
10+
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+
function func() {
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

Comments
 (0)