2016-03-28 2 views
3
This MDN page

претензии:Итерация в JavaScript

... вы можете перебрать массив, используя следующие:

for (var i = 0; i < a.length; i++) { 
    // Do something with a[i] 
} 

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

for (var i = 0, len = a.length; i < len; i++) { 
    // Do something with a[i] 
} 

приятнее на вид, но ограниченный идиома:

for (var i = 0, item; item = a[i++];) { 
    // Do something with item 
} 

Являются ли эти действительно общепринятые способы итерации? Не будут ли современные JavaScript-движки оптимизировать первый?

+3

* Разве современные механизмы JavaScript просто не оптимизировали бы первый? * Да, они будут. Страница MDN неверна. Помните, что MDN написана обычными людьми, такими как я и вы. Кстати, последний фрагмент ужасен, потому что он остановит цикл на любом элементе массива без фальсификации. Я исправил страницу MDN. –

+2

Как правило, не делайте странных вещей, потому что они «быстрее». Напишите очевидный код. Разработчики компилятора потратят больше времени на то, чтобы оптимизировать очевидный код, чтобы быть быстрым, и разработчикам обслуживания будет легче понять, что вы пытались сделать. Только сделайте странный изгиб, когда вы можете доказать, что он * заметно быстрее для * пользователя *, а не * измеримо * быстрее для некоторого теста бенчмаркинга. –

+0

Конечно; Я был смущен, потому что предположил, что MDN является авторитетным источником, а во втором - вторым методом. –

ответ

1

Неверная страница MDN. Современные двигатели будут оптимизировать обработку длины. Фактически, некоторые двигатели будут быстрее запускать первый фрагмент.

Смежные вопросы