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