ОБНОВЛЕНИЕ:
Многие старые уловки в этих ответах отлично подходят для интерпретируемого JS в старых браузерах.
В любой современной реализации JS, включая все современные браузеры, Node и последниеМобильные веб-просмотры, встроенные функции могут фактически кэшироваться JIT (JS-компилятором), что делает forEach гораздо более быстрой опцией для итерации массива, как правило.Раньше было наоборот, когда простое обращение к функции неоднократно требовало процесса наращивания / разрыва, который мог бы серьезно снизить производительность нетривиального цикла.
Для лучшей производительности я бы избегал ссылаться на все, чтоне был передан в качестве аргумента или определен внутри самой функции, если не требуется.Я не уверен на 100%, что это имеет значение, но я мог понять, почему это так.
Значения получателя, которые включают в себя любой тип процесса поиска, например, длины массива или свойства узла DOM, вероятно, все еще лучше кэшируются в переменную.
Но помимо этого я бы постарался просто позволить основному принципу избегания работы направлять ваши усилия.Хорошие примеры этого - предварительный расчет вещей, которые не нужно пересчитывать в цикле, или кэширование результата селектора запросов в var, а не копаться в DOM.Слишком сильная попытка воспользоваться преимуществами поведения JIT, вероятно, станет довольно загадочной и вряд ли сохранится со временем или во всех JIT.
СТАРЫЙ ОТВЕТ:
Хорошо, забудьте стену текста,Пункты маркированного списка:
var i = someArray.length; //length is cached
someArray.reverse(); //include this only if iterating in 0-(length-1) order is important
while(i--){
//run a test statement on someArray[i];
}
длина кэшируется и немедленно включается в индекс
Преимущество повторения в обратном направлении в JS AFAIK позволяет избежатьлогический оператор с двумя операндами.В этом случае мы просто оцениваем число.Это правда или ноль и ложь.
Я также нахожу это элегантным.