In this website there are a list of for loop variations. I can understand the usage of for(var i=0, len=arr.length; i<len ;i++) loop (where arr is an array), since the arr.length isn’t calculated in every step there appears to be a marginal performance gain. However what are the advantages of using the other variants? For instance, loops like
for (var i=arr.length; i--;)for (var i=0, each; each = arr[i]; i++)
Are there any noticeable changes in performance when using different for loop variations? I generally use for(var i=0, len=arr.length; i<len ;i++) even for very big arrays. So I just want to know if there is something I am missing out here.
It is widely considered that a reversed while loop
is the fastest loop-type available in C-like languages (this also applied to ECMAscript for quite a while, but I think all up-to-date engines are pretty even on standard loops today). ( jsperf )
Your ‘variations’ are actually no variations, but just different usage of the
conditionalstatement within thefor-loop(which, actually makes it a variation..doh!). Like1)
for (var i=arr.length; i--;)Just uses the conditional part from the
for-loopto do both, iterating and checking ifihas a truthy value. As soon asibecomes0the loop will end.2)
for (var i=0, each; each = arr[i]; i++)Here we get the element from each iteration, so we can directly access that within the loop body. This is commonly used when you are tired of always repeating
arr[ n ].You’re doing well in caching the
.lengthproperty before looping. As you correctly mentioned, it is faster because we don’t have to access that property in every iteration. Beyond that, it’s also required sometimes in DOM scripting, when dealing with ‘live structures’ likeHTMLCollections.