


Не пойму работу JS функции

Не пойму почему если писать просто alert(count++); - функция выводит 0, 1.
А если писать так как закомментировано -выводит 1, 2.
и не пойму: для запуска Функции обязательно записывать её в переменную? Почему нельзя написать просто makeCounter()? Если написать просто makeCounter() - то в консоль ничего не выводит. Хотя это стандартный вызов Функций.
Потому, что ЗНАЧЕНИЕМ операции x++ является значение x ДО увеличения,
а ПОБОЧНЫМ ЭФФЕКТОМ операции x++ является увеличение x.
x++ эквивалентно конструкции: ((temp = x), (x += 1), temp)
А вот операция ++x СНАЧАЛА увеличит значение x, а потом вернёт уже увеличенное значение.
1. функция makeCounter возвращает анонимную функцию, в которой и происходит вызов alert(т.е. ты записываешь эту функцию в переменную затем вызываешь). Если хочешь чтоб работало без присваивания напиши:
function makeCounter(){
static let count = 0;
alert(count++);
}
2. Почему count++ затем alert(count) выводит 1;
Потому что count++ аналогично count = count + 1. Операция ++ это операция пост-инкремента(операция выполняется до выполнения этого инкремента) есть ещё префикс-инкремента(возвращает значение уже измененной переменной). т.е. если написать alert(count++) выведет 0 если alert(++count) будет 1.
таков js