Считается, что обратный цикл while
var loop = arr.length;
while( loop-- ) {
}
- самый быстрый тип цикла, доступный в C-подобных языках (он также применялся к ECMAscript довольно долгое время, но я думаю, что все современные движки довольно хороши даже сегодня на стандартных циклах). ( jsperf )
Ваши 'вариации' на самом деле не вариации, а просто другое использование оператора conditional
в пределах for-loop
(что фактически делает его вариацией ... да!). Нравится
1) for (var i=arr.length; i--;)
Просто использует условную часть из for-loop
для выполнения итерации и проверки, имеет ли i
истинное значение. Как только i
станет 0
, цикл закончится.
2) for (var i=0, each; each = arr[i]; i++)
Здесь мы получаем элемент из каждой итерации, поэтому мы можем напрямую получить к нему доступ в теле цикла. Это обычно используется, когда вы устали постоянно повторять arr[ n ]
.
Вы хорошо кэшируете свойство .length
перед циклом. Как вы правильно заметили, это быстрее, потому что нам не нужно обращаться к этому свойству на каждой итерации. Кроме того, это иногда требуется в сценариях DOM, когда имеешь дело с «живыми структурами», такими как HTMLCollections
.