1110001111
@1110001111

Как объект запоминает свое окружение?

Как возвращенный из функции объект, запоминает свое лексическое окружение?
function outer() {
    var a = 10;
    function solve() {
        return a + 2;
    }
    return { 
        b : 20,
        c : a + 1,
        d : solve()
    }
}
var obj = outer();
console.log(obj.c); //11
console.log(obj.d); //12

Возвращаемый объект хранится в LexicalEnvironment->EnvironmentRecord функции outer?
При выходе из функции outer ее ExecutionContext удаляется из стека, но так как LexicalEnvironment хранится в куче, то он хранится до тех пор, пока на него есть хоть одна ссылка. Т.е. через возвращенный объект я удерживаю ссылку на LE и не даю его удалить?
  • Вопрос задан
  • 218 просмотров
Пригласить эксперта
Ответы на вопрос 2
khipster
@khipster
Возвращаемый объект хранится в LexicalEnvironment->EnvironmentRecord функции outer?
Объект не хранится, а имеет ссылку на лексическое окружение в котором был создан.

Т.е. через возвращенный объект я удерживаю ссылку на LE и не даю его удалить?
Да, это замыкание.
Ответ написан
Комментировать
1110001111
@1110001111 Автор вопроса
Объект не хранится, а имеет ссылку на лексическое окружение в котором был создан.
Эта ссылка внутреннее свойство объекта? Как она называется?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы