воскресенье, 29 января 2012 г.

Замыкание

Замыкание(лексическое замыкание, замыкание функции, значения функции, функциональные значения) - это функция + среда, которая дает ей возможность ссылаться на не ее локальные переменные (переменные извне функции, но в одной области видимости).

В динамических языках програмирования сборщик мусора не удаляет локальную переменную до тех пор, пока на нее существуют хотябы одна ссылка из какого-нибудь замыкания, которое по тем или иным причинам продолжает жить. Например 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);


Вроде как локальную переменную анонимной функции, вызваной в начале программы , сборщик мусора должен бы почистить. Но он этого делать не будет - она будет продолжать существовать, потому что было создано замыкание с которым связана функция, которая и дальше продолжает жить по всему приложению, удерживая живой нашу локальную переменную.

Комментариев нет:

Отправить комментарий