Encontrei a seguinte anotação de loop em um grande projeto no qual estou trabalhando (pseudocódigo):
var someOtherArray = [];
for (var i = 0, n = array.length; i < n; i++) {
someOtherArray[i] = modifyObjetFromArray(array[i]);
}
O que chamou minha atenção é essa variável "n" extra. Eu nunca vi um for lop escrito dessa maneira antes.
Obviamente, nesse cenário, não há razão para que esse código não possa ser escrito da seguinte maneira (com a qual estou muito acostumado):
var someOtherArray = [];
for (var i = 0; i < array.length; i++) {
someOtherArray[i] = modifyObjetFromArray(array[i]);
}
Mas isso me fez pensar.
Existe um cenário em que escrever um loop for faria sentido? A ideia vem à mente de que o comprimento do "array" pode mudar durante a execução do loop for, mas não queremos um loop além do tamanho original, mas não consigo imaginar esse cenário.
Encolher a matriz dentro do loop também não faz muito sentido, porque provavelmente obteremos OutOfBoundsException.
Existe um padrão de design conhecido em que essa anotação é útil?
Editar Conforme observado por @ Jerry101, o motivo é o desempenho. Aqui está um link para o teste de desempenho que eu criei: http://jsperf.com/ninforloop . Na minha opinião, a diferença não é grande o suficiente, a menos que você esteja repetindo uma variedade muito grande. O código do qual copiei tinha apenas 20 elementos, então acho que a legibilidade neste caso supera a consideração de desempenho.
npode ser mais lenta que a variante utilizada, array.Lengthpois o JITter pode não perceber que poderia eliminar as verificações dos limites da matriz.