Страницы

Поиск по вопросам

понедельник, 30 декабря 2019 г.

Какая разница между формами инкремента i++ и ++i в цикле for?

#javascript


for (var i = 0; i < 5; ++i) {
    alert(i); // 0,1,2,3,4
}

for (var i = 0; i < 5; i++) {
    alert(i); // 0,1,2,3,4
}


https://jsfiddle.net/z0ugbbwj/

Не увидел разницы.
    


Ответы

Ответ 1



В приведённом примере разницы нет. Подробнее про легенды, что ++i быстрее. Ходят слухи, что для выполнения ++i значение в памяти увеличивается и затем возвращается. В то время, как для i++ сначала запоминается значение в создаваемой временной переменной, потом увеличивается значение основной и возвращается значение временной – таким образом увеличиваются «расходы» на создание временной переменной. Перформанс тест не удаётся посмотреть из-за временного косяка на их стороне.

Ответ 2



В данном случае разницы нет, так как это выражение выполняется в конце итерации и может быть переписано таким образом for (var i = 0; i < 5;) { console.log(i); // 0,1,2,3,4 ++i; } for (var i = 0; i < 5;) { console.log(i); // 0,1,2,3,4 i++; } Так как это выражение выполняется отдельно, и его возвращаемое значение не используется - нет никакой разницы как именно менять значение переменной, абсолютно аналогичные варианты: i += 1; i = i+1; i = inc(i); ... Разница появится при использовании инкремента во втором блоке: for (var i = 0; ++i < 5;) { console.log(i); // 0,1,2,3,4 } for (var i = 0; i++ < 5;) { console.log(i); // 0,1,2,3,4 }

Ответ 3



Разница в том, что ++i инкрементирует, а затем возвращает значение. i++ возвращает значение, а потом инкрементирует.

Комментариев нет:

Отправить комментарий