Предостережение: Беспокойство по поводу производительности, когда у тебя есть проблема с c, о которой стоит беспокоиться. А пока пишите все, что кажется вам ясным и наименее подверженным ошибкам для вас и вашей команды. В 99,999999% случаев конкретная c производительность данного l oop просто не будет иметь значения в реальном мире.
С учетом сказанного:
С современным JavaScript Я бы, вероятно, вместо этого использовал бы for-of
l oop (ES2015 +):
for (const entry of someArray) {
if (entry.position.y > blabla) {
// ...
}
}
Теоретически, он использует закулисный итератор, который включает вызовы функций; на практике вполне вероятно, что если вы имеете дело с реальным массивом, и этот массив использует стандартный итератор, механизм JavaScript сможет оптимизировать l oop, если l oop является горячей точкой (и если это не так, об этом не стоит беспокоиться).
Относительно ваших двух альтернатив, если i
и someArray
не меняются в l oop и someArray
- это просто нормальное В массиве двигатель JavaScript, вероятно, сможет оптимизировать его до уровня, подобного вашему второму l oop. Что касается стиля, до for-of
я всегда использовал локальное значение внутри l oop вместо того, чтобы каждый раз набирать someArray[i]
, но это только потому, что легче набрать tmp
(или более значимое имя), чем someArray[i]
.
Если есть причина полагать, что спецификация c l oop является медленной (поэтому по какой-то причине она не оптимизируется), тогда я мог бы go с чем-то вроде вашего второй пример:
for (let i = 0, max = someArray.length; i < max; i++) {
const tmp = someArray[i];
if (tmp.position.y > blabla) {
//...
}
}
Но опять же , это в основном вопрос стиля до тех пор, пока у вас не возникнет конкретная c проблема производительности, которую вы диагностируете и исправляете.