Очень простой приём "эмуляции" forEach
Может быть кому-то будет интересно.
Лично я использую
forEach вместо for не только благодаря скрытию переменных от верхней области видимости, но и благодаря возможности именовать текущий элемент массива:
items.forEach( function( *!*item*/!*, i ){
//...
});
вместо
for( var i = 0; i < items.length; i++ ) {
//...
}
Согласитесь,
item выглядит красивее, нежели
items[i], особенно если использовать цикл в цикле:
items[i][j][k].
Но, иногда,
for лучше подходит для решения задачи: во-первых он в два раза быстрее (если использовать IE fallback, то и более, чем в два раза), что важно в сложных проектах, во-вторых можно менять массив как пожелаешь, так как количество итераций динамично и зависит от текущей длины массива, а не той, которая была в начале цикла.
items.splice( i--, 1 ); // такое не прокатит в forEach
Простое, но несколько громоздкое решение именования текущего элемента итерации:
for( var i = 0, item = items[ 0 ]; i < items.length; item = items[ ++i ] ) {
//...
}
Теперь
item === items[0].