• Почему постфиксный и префиксный инкременты выдают одно и то же значение?

    @Eva25 Автор вопроса
    Проблема была в непонимании работы постфиксного и префиксного инкремента.

    1. Префиксный инкремент (также и декремент) вычитывает значение и сразу же возвращает уже "новое", только что высчитанное.

    2. Постфиксный инкремент (также и декремент) сначала выдает "старое" значение, а "новое" высчитывает уже после окончания инструкции. То есть... а++ – за пределами этой переменной с постфиксным инкрементом значение будет "новое", в пределах этой переменной с постфиксным инкрементом - пока еще "старое".

    Именно по этому в двух циклах for выдаются одинаковые значения, а в while - разные.
    for (let i = 0; i < 3; i++) alert( i );
    1. Проверяется условие начала - выводится.
    2. Выполняется шаг (в самом шаге переменная равна нулю, дальше шага - 1), выполняется сравнение - выводится и т.д.
    let i = 0;
    while (i++ < 5) alert( i );

    1. К начальному значению прибавляется 1 с помощью постфиксного инкремента (сама инструкция с инкрементом еще равна нулю, поэтому сравнение происходит с нулем; за пределами уже 1, поэтому выводится 1).
    То есть в while в условии находится само условие и шаг. В for все отдельно.
    Ответ написан
    Комментировать