Я ++ против ++ я в цикле JavaScript для

Из-за JSLint я почти всегда использую i += 1 чтобы увеличить JavaScript для цикла, но для быстрых и грязных сценариев, я использую i++ вместо.
Тем не менее, я вижу много циклов for в коде других людей, в котором они увеличивают i при выполнении ++i вместо.

Насколько я знаю, нет никакой разницы в значении между i++ а также ++iи jsPref не показывает разницы в производительности.
Таким образом, мне интересно, где конвенция делать ++i и почему люди склонны это делать.

Кто-нибудь знает, почему многие JS-кодеры предпочитают ++i над i++ при увеличении счетчика в цикле?
Благодарю.

4 ответа

Решение

В JS и PHP это не имеет никакого значения, я думаю, что даже в Java это не имеет никакого значения, но в чистом c, когда компилятор не оптимизирует код, это делает, и именно поэтому многие люди используют ++i, потому что они привык к этому с ц.

РЕДАКТИРОВАТЬ: Это ответ для JS, если вы хотите, чтобы история до и после увеличения поиска C/C++ до / после увеличения. Или посмотрите комментарии к ответу @ Орвева.

Разница в том, что i++ возвращает значение i перед увеличением и ++i значение i после увеличения. Нет разницы, если вы игнорируете возвращаемое значение, например, в:

for (var i = 0; i < 10; i++) {

}

Привычка использовать ++i над i++ происходит из C, где люди беспокоятся, что сохранение старого значения для i в i++ понесет штраф за производительность.

Когда-то в тот день (мы говорим об IE6/7 здесь!), Я вспоминаю, как сравнивал обе формы, и обнаружил, что с небольшим улучшением производительности ++i вместо i++, Моя (недоказанная) теория заключалась в том, что неоптимизирующему движку JS приходилось выполнять чуть больше работы в i++ case: он должен был сохранить предыдущее значение в случае его использования - и, будучи неоптимизирующим механизмом, он не осознавал, что значение фактически не будет использоваться, и его не нужно было сохранять.

Тем не менее, с современными браузерами нет существенной разницы. Если что-нибудь, i++ кажется, немного быстрее во многих браузерах.

Вот несколько тестов различных циклов:

http://jsperf.com/mikes-loops/5

Посмотрите на результаты для "Традиционной петли" (это использует ++i) и "Традиционная петля с i++".

Относительно требования JSLint, что никогда не следует использовать ++i или же i++ но только использовать i += 1 вместо этого это просто безумие и чрезмерный контроль, как и многие другие вещи в JSLint.

Лично я рекомендую вместо этого JSHint. Это менее догматично, гораздо более практично и проще в настройке под ваш собственный стиль.

Разница есть, но не в цикле for.

В выражении i++ оценивает к предыдущему значению i, а потом i увеличивается ++i сначала увеличивает, а затем оценивает.

По этой причине некоторые программисты предпочитают писать ++i в их циклах - либо потому, что они привыкли к этому, либо потому, что они чувствуют, что это как-то "более правильно".

редактировать: более вероятным является решение, предложенное Овертом: реликт из C.

Другие вопросы по тегам