1: var a = 'Is';
2: function test() {
3: var a = 'Fun';
4: function again() {
5: var a = 'JavaScript';
6: alert(a);
7:
8: }
9: again();
10: alert(a);
11: }
12: test();
13: alert(a);
Перед выполнением строки 1: Переменная a
, инициализированная значением undefined
, и функция test
, добавляются в текущую лексическую среду. Если этот код выполняется в глобальном контексте, эти переменные будут добавлены в качестве свойств глобального объекта.
Строка 1: Строка 'Is'
назначена переменной a
в этой лексической среде.
Строка 12: Скрытый метод [[Call]]
вызывается для функции test
, и создается новый контекст выполнения с переменной a
( с начальным значением undefined
) и функцией again
, добавленной в его лексическое окружение.
Строка 3: Строка 'Fun'
назначена переменной a
в это лексическое окружение.
Строка 9: Скрытый метод [[Call]]
вызывается для функции again
, и создается новый контекст выполнения с переменной a
(с начальное значение undefined
), добавленное к его лексической среде.
Строка 5: Строка 'JavaScript'
присваивается переменной a
в этой лексической среде.
Строка 6: Вызывается предоставляемая хостом функция window.alert
, pa ssing значение, связанное с переменной a
в этой лексической среде ('JavaScript'
).
Строка 10: Вызывается предоставленная хостом функция window.alert
, передавая значение, связанное с переменная a
в этой лексической среде ('Fun'
).
Строка 13: Вызывается предоставленная хостом функция window.alert
, передавая значение, связанное с переменной a
, в это лексическая среда ('Is'
).