Я ++ против ++ я в цикле 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.