Что такое замыкание, счетчик на замыкании

Как использование замыкание, чтобы написать код для счетчика без глобальной переменной?

Замыкание это возвращенная функция с известными (свободными) переменными которые ее окружают. Пример:


 
<script>
function zzz() {
    var count = 0;
   
    function counter(){
        return count++;
    }
    return counter;
}
 
var amazing = zzz();
 
alert (amazing());
alert (amazing());
alert (amazing());
 
</script>

 

Сначала мы инициализируем локальную переменную в функции zzz задавая ей начальное состояние 0. И возвращаем из функции функцию которая должна прибавлять единицу.

Когда мы будем вызывать эту возвращенную функцию из разных мест кода, на удивление переменная count будет сохранять свое новое значение, а не сбрасывать его в 0, как обычно просиходит с локальными переменными в функциями. Почему?

Здесь действует правило Замыкание. После возврата функции, мы в переменной amazing имеем эту возвращенную функцию И переменные окружения, а именно count. Эта переменная будет сохранять свое новое состояние уже в переменной amazing, но не будет являтся глобальной.

 

Пример более короткой записи на безамынных функциях:

var amazing = (function(){ var count=0; return function(){ return count++} })();
console.log (amazing());
console.log (amazing());
console.log (amazing());

 

Или можно записать функцию замыкания еще короче:

var amazing = function(){ return amazing.count++};
amazing.count=1;
console.log (amazing());
console.log (amazing());
console.log (amazing());

 

 

Теория всего этого - лямбда-исчисление Чёрча



Оставить свой ответ:

Имя:*
E-Mail:
Вопрос:
Skolko buдет пять пдюс сeмь?
Ответ:*
QQpedia21.ru - cамые интересные вопросы