Что такое замыкание, счетчик на замыкании
Тэги: основы javascript javascript функции
📅8-08-2018 👁449
Как использование замыкание, чтобы написать код для счетчика без глобальной переменной?
Замыкание это возвращенная функция с известными (свободными) переменными которые ее окружают. Пример:
<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());
Теория всего этого - лямбда-исчисление Чёрча
Оставить свой ответ: