Javascript-форум (https://javascript.ru/forum/)
-   Учебные материалы (https://javascript.ru/forum/study/)
-   -   Функции, счетчик, нуб. (https://javascript.ru/forum/study/76757-funkcii-schetchik-nub.html)

ndrwKrpnk 11.02.2019 09:08

Функции, счетчик, нуб.
 
Здравствуйте, я совсем недавно начал осваивать js и у меня появилась пара вопросов по функциям.
1. То, что cntr() возвращает [Function] мне понятно, но почему counter() возвращает правильный результат (в данном случае счетчик) при том, что "counter = cntr()"?
2. Чем отличается cntr()() от counter()?
const cntr = () =>{
	let i = 0;
	return (() => {
		i++;
		return i;
    })
}
console.log(cntr()); //[Function]
console.log(cntr()()); //1
console.log(cntr()()); //1

const counter = cntr();

console.log(counter()); //1
console.log(counter()); //2
console.log(counter()); //3
console.log(counter()); //4

Nexus 11.02.2019 09:20

Цитата:

Сообщение от ndrwKrpnk
почему counter() возвращает правильный результат (в данном случае счетчик) при том, что "counter = cntr()"?

counter !== cntr()
В переменной counter содержится анонимная функция (замыкание), которую вернула функция cntr.
Вызов функции, которая сохранена в переменной counter не вызовет повторно функцию cntr.

Цитата:

Сообщение от ndrwKrpnk
Чем отличается cntr()() от counter()

В первом случае вы постоянно будете создавать новый счетчик и инкрементировать его, во втором будете инкрементировать уже созданный счетчик.


Надеюсь понятно объяснил.

ndrwKrpnk 11.02.2019 09:27

Спасибо большое. Фраза "counter не вызовет повторно функцию cntr" все поставила на свои места.


Часовой пояс GMT +3, время: 07:26.