У меня есть функция:
setInterval(function () {
var counter = 0;
(function() {
counter = counter + 1;
console.info(counter);
})(counter)
}, 1000)Почему он не увеличивает счетчик? (вместо этого он записывает единицы). Как заставить регистрировать возрастающие числа? (1, 2, 3, ....)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


(function(closed_over_counter) {
setInterval(function() {
closed_over_counter++;
console.info(closed_over_counter);
}, 1000);
})(0);Поскольку вы используете IIFE вместо функции, которую можно вызывать несколько раз, это бессмысленно. С таким же успехом вы можете просто объявить переменную внутри замыкания.
(function() {
var counter = 0;
setInterval(function() {
counter++;
console.info(counter);
}, 1000);
})();Вы можете использовать функцию, которая возвращает функцию как закрытие по счетчику.
setInterval(function(counter) {
return function() {
console.info(++counter);
};
}(0), 1000);Если честно, это очень хороший пример в setInterval с закрытием! должно быть в учебнике.
Скрытая версия ответа Нина Шольц со стрелочными функциями:
setInterval(((counter) => () => console.info(++counter))(0), 1000);
Вы не можете сделать закрытие таким образом. setInterval всегда вызывает внешнюю функцию в вашем коде. Вы должны определить закрытие отдельно.