Я считаю довольно неприятной практику кэширования свойства массива length
внутри цикла for
. Например,
for (var i = 0, l = myArray.length; i < l; ++i) {
// ...
}
По крайней мере, на мой взгляд, это сильно ухудшает удобочитаемость по сравнению с простым
for (var i = 0; i < myArray.length; ++i) {
// ...
}
(не говоря уже о том, что он пропускает другую переменную в окружающую функцию из-за природы лексической области видимости и подъема.)
Я хотел бы иметь возможность сказать любому, кто делает это: «Не беспокойтесь; современные JS JIT-программы оптимизируют этот трюк». Очевидно, что это нетривиальная оптимизация, поскольку вы могли бы, например, модифицируйте массив во время итерации, но я думаю, учитывая все безумные вещи, которые я слышал о JITers и их трюках анализа времени выполнения, они бы уже до этого добрались.
У кого-нибудь есть доказательства так или иначе?
И да, я тоже хотел бы, чтобы было достаточно сказать: «Это микрооптимизация; не делайте этого, пока не профилируете». Но не все прислушиваются к подобным причинам, особенно когда становится привычкой кэшировать длину, и в конечном итоге они делают это автоматически, почти как выбор стиля.