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
Copy file name to clipboardExpand all lines: content/ru/2-3-Context.md
+11-7
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,8 @@
1
1
## 2.3. Контекст и лексическое окружение
2
2
3
-
> Область видимости (Scope) — часть кода, из которой "виден" идентификатор.
3
+
> Область видимости (Scope)
4
+
5
+
Область видимости — часть кода, из которой "виден" идентификатор. Рассмотрим пример:
4
6
5
7
```js
6
8
constlevel=1;
@@ -15,7 +17,7 @@ const f = () => {
15
17
};
16
18
```
17
19
18
-
В современном стандарте `JavaScript` область видимости порождается функцией или любым блоком операторов, имеющим фигурные скобки `{}` или операторами ветвления и циклов, в которых могут быть блоки, но скобки `{}` могут и опускаться. В `Python` scope порождается только функциями. Сравните этот код с предыдущим примером:
20
+
В современном стандарте `JavaScript` область видимости порождается функцией или любым блоком операторов, имеющим фигурные скобки `{}`. В `Python` scope порождается только функциями. Сравните этот код с предыдущим примером:
19
21
20
22
```py
21
23
level =1
@@ -30,14 +32,16 @@ def f():
30
32
f()
31
33
```
32
34
33
-
> Лексический контекст (Lexical environment) — набор идентификаторов, связанных с определенными значениями в рамках функции или блока кода (в том числе блоков циклов, условий и т.д.).
35
+
> Лексический контекст (Lexical environment)
36
+
37
+
Набор идентификаторов, доступный в локальном блоке или функции. Если идентификатор не найден в лексическом контексте, то поиск продолжится в родительском контексте, ведь контексты имеют вложенную структуру. Если дойдя до корня идентификатор не найден, то будут проведен поиск в глобальном контексте. Ддля JavaScript лексические контексты ограничиваются блоками `{}` и функуциями, а для Python — только функциями.
34
38
35
39
Лексический контекст или лексическое окружение имеют вложенность, т.е. кроме локальных переменных в блоке, порождающем контекст, есть и вышестоящий блок со своим контекстом. Если идентификатор определен в вышестоящем контексте, то он виден во всех вложенных, если только не происходит перекрытия имен. Перекрытие — это случай, когда во вложенном контексте заново объявлен идентификатор, уже имеющийся во внешнем, тогда значение из внешнего контекста становится недоступно и мы можем доступаться только к внутреннему.
36
40
37
-
> Объектный контекст функции — объект, связанный со служебным идентификатором `this`.
41
+
> Объектный контекст
38
42
39
-
Все функции, кроме стрелочных, могут быть связаны с объектным контекстом. Объект связан с `this`, если функция является методом этого объекта, если функция привязана к нему через `bind` или вызвана через `apply` и `call`.
43
+
Объект, доступный из методов и функций через специальный идентификатор `this` тоже используется в качестве контекста. В большинстве языков программирования, метод связывается с `this` при создании объекта класса. Но в JavaScript функции могут быть прикреплены к `this` при помощи `bind` или одноразово вызваны в контексте объекта через `call` и `apply`. Все функции, кроме стрелочных, могут быть связаны с объектами.
Если идентификатор не находится ни в одном из вложенных лексических контекстов, то будет выполнен его поиск в глобальном контексте (global, window, sandbox).
47
+
Если идентификатор не находится ни в одном из вложенных лексических контекстов, то будет выполнен его поиск в глобальном объекте-справочнике, который является глобальным контекстом (в JavaScript `global` или `window`).
0 commit comments