@Extramezz

Тонкости LexicalEnvironment?

Перечитываю тут статейку learn.javascript.ru/closures и созрел у меня один вопрос.
var myFunc = (function wrap(arg){

// При вызове этой функции в ее LexicalEnvironment записывается аргумент arg

arg.b = 2;

return function closest(){

   //Эта функция получает свойство [[Scope]], ссылающееся на область видимости функции wrap

}

})({b:3});


Вопрос: что же это получается - объект arg будет висеть в памяти до тех пор, пока будет существовать функция myFunc? Ведь по логике, у closest хранится ссылка на область видимости myFunc, а у myFunc в LexicalEnvironment есть ссылка на объект arg. А спецификация гласит, что объект будкет в памяти до тех пор, пока на него есть ссылки.
  • Вопрос задан
  • 209 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Объект arg будет висеть в памяти пока есть ссылки на функцию closest, в данном коде такую ссылку хранит переменная myFunc, так же в памяти будет висеть и сама функция wrap так как мы можем ее использовать из замыкания
Однако в современных движках js очень много зависит от самой функции closest, те переменные, которые не используются в замыкании будут удалены из памяти по окончании функции wrap
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
28 нояб. 2024, в 21:25
5000 руб./за проект
28 нояб. 2024, в 18:46
3000 руб./за проект
28 нояб. 2024, в 17:46
10000 руб./за проект