Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Союз Здравых Сил Профи (515), закрыт 6 месяцев назад
Не пойму почему если писать просто alert(count++); - функция выводит 0, 1.
А если писать так как закомментировано -выводит 1, 2.

и не пойму: для запуска Функции обязательно записывать её в переменную? Почему нельзя написать просто makeCounter()? Если написать просто makeCounter() - то в консоль ничего не выводит. Хотя это стандартный вызов Функций.
Лучший ответ
Андрей Высший разум (447454) 7 месяцев назад
Потому, что ЗНАЧЕНИЕМ операции x++ является значение x ДО увеличения,
а ПОБОЧНЫМ ЭФФЕКТОМ операции x++ является увеличение x.
 x++ эквивалентно конструкции: ((temp = x), (x += 1), temp) 
А вот операция ++x СНАЧАЛА увеличит значение x, а потом вернёт уже увеличенное значение.
Остальные ответы
Кирилл Грушников Знаток (434) 7 месяцев назад
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.
Союз Здравых СилПрофи (515) 7 месяцев назад
1) насчёт вызова функции - получается я не могу вызывать её просто написав makeCounter() - потому что в ней есть анонимная функция, поэтому?
2) спасибо, но это я знаю, я не понял почему если записать alert(count++) выведет 0
А если: count++
alert(count) - то 1
Кирилл Грушников Знаток (434) Союз Здравых Сил, 1) просто написав makeCounter() нет, но для вызова функции внутри makeCounter можешь написать makeCounter()(). 2) потому что операция присваивания в alert(count++) срабатывает после alert. Во втором случае сначала переменная увеличивается затем выводится, поэтому 1.
Похожие вопросы