liqrizz
@liqrizz
лол

Почему не происходит замыкание?

Хотел по клику получить счетчик 0, 1, 2, 3, 4...
$('#elem').click(()=>{
        let count = 0;
        return (()=>{  
            count++; 
            console.log(count)  
        })();
    });

Но получаю 1, 1, 1, 1, 1...

Что не так?
  • Вопрос задан
  • 186 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Вы не там поставили immediate invocation. Должно быть так, чтобы получилось замыкание:
$('#elem').click((() => {
  // Основное тело функции будет исполнено один раз при установке обработчика
  // Таким образом создастся замыкание для переменной count
  let count = 0;

  // А вот здесь уже вернётся настоящий обработчик клика,
  // который будет вызваться при каждом нажатии
  return () => {
    count++;
    console.log(count)
  };
})());


Ваш текущий код, по сути, является вот этим:
$('#elem').click(() => {
    let count = 0;
    count++; 
    console.log(count);
});
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Athanor
@Athanor
Лайк + Решение: не жмись, нажми
Потому что при каждом клике count создается заново. Чтоб брать count из замыкания, стоит вынести его куда-то повыше, например так.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
27 нояб. 2024, в 19:08
1500 руб./в час
27 нояб. 2024, в 18:19
2000 руб./за проект