Создайте счетчик, который вместо замыкания использует статическую переменную для хранения currentCount.
Код счетчика через замыкание:
function makeCounter() {
var currentCount = 0; // сделать статической переменной счетчика
return function() {
currentCount++;
return currentCount;
};
}
Счетчики не должны изменять своё поведение, т.е. каждый — сам по себе:
var c1 = makeCounter(); var c2 = makeCounter(); alert( c1() ); // 1 alert( c2() ); // 1 alert( c1() ); // 2
Решение
Решение
Переписанный счетчик:
function makeCounter() {
return function() {
if (!arguments.callee.currentCount) {
arguments.callee.currentCount = 0;
}
return ++arguments.callee.currentCount;
};
};
var c1 = makeCounter();
var c2 = makeCounter();
alert( c1() ); // 1
alert( c2() ); // 1
alert( c1() ); // 2
Побочный эффект — текущее значение счетчика теперь доступно снаружи через свойство функции:
var counter = makeCounter(); counter(); alert( counter.currentCount ); // 1
#356