Замыкание(лексическое замыкание, замыкание функции, значения функции, функциональные значения) - это функция + среда, которая дает ей возможность ссылаться на не ее локальные переменные (переменные извне функции, но в одной области видимости).
В динамических языках програмирования сборщик мусора не удаляет локальную переменную до тех пор, пока на нее существуют хотябы одна ссылка из какого-нибудь замыкания, которое по тем или иным причинам продолжает жить. Например JavaScript:
Вроде как локальную переменную анонимной функции, вызваной в начале программы , сборщик мусора должен бы почистить. Но он этого делать не будет - она будет продолжать существовать, потому что было создано замыкание с которым связана функция, которая и дальше продолжает жить по всему приложению, удерживая живой нашу локальную переменную.
В динамических языках програмирования сборщик мусора не удаляет локальную переменную до тех пор, пока на нее существуют хотябы одна ссылка из какого-нибудь замыкания, которое по тем или иным причинам продолжает жить. Например JavaScript:
var closureKeeper;
(function(){
var myCounter = 0;
closureKeeper = function(step){
if(typeof step != 'undefined' && !isNaN(step)){
myCounter += step;
}else{
++myCounter;
}
alert(myCounter);
}
}());
closureKeeper();
.....
closureKeeper(5);
.....
closureKeeper(10);
Вроде как локальную переменную анонимной функции, вызваной в начале программы , сборщик мусора должен бы почистить. Но он этого делать не будет - она будет продолжать существовать, потому что было создано замыкание с которым связана функция, которая и дальше продолжает жить по всему приложению, удерживая живой нашу локальную переменную.
Комментариев нет:
Отправить комментарий