La propiedad de longitud no se calcula en cada llamada, pero esta última versión será más rápida ya que está guardando en caché la búsqueda de propiedades. Incluso con las implementaciones más actualizadas de JS (V8, TraceMonkey, SquirrelFish Extreme) que usan caché de propiedades avanzadas (por ejemplo, SmallTalk era;)), la búsqueda de propiedades sigue siendo al menos una rama condicional adicional más que su segunda versión.
Array.length no es constante, sin embargo, como las matrices JS son mutables, por lo que push, pop, array[array.length]=0, etc
pueden cambiarlo.
Hay otros conceptos como el DOM NodeList
que obtienes de llamadas como document.getElementsBySelector
que se espera que sean reales, en cuyo caso la longitud se puede recalcular al iterar. Pero luego, si la longitud se vuelve a calcular, existe una buena posibilidad de que también haya cambiado realmente, por lo que el almacenamiento en caché manual de la salida puede no ser válido.
La diferencia entre los dos enfoques es insignificante para una matriz. Solo se vuelve significativo cuando se trata del DOM. – AnthonyWJones