Ho trovato la seguente annotazione in loop in un grande progetto a cui sto lavorando (pseudocodice):
var someOtherArray = [];
for (var i = 0, n = array.length; i < n; i++) {
someOtherArray[i] = modifyObjetFromArray(array[i]);
}
Ciò che ha attirato la mia attenzione è questa variabile "n" aggiuntiva. Non ho mai visto un for lop scritto in questo modo prima d'ora.
Ovviamente in questo scenario non c'è motivo per cui questo codice non possa essere scritto nel modo seguente (al quale sono molto abituato):
var someOtherArray = [];
for (var i = 0; i < array.length; i++) {
someOtherArray[i] = modifyObjetFromArray(array[i]);
}
Ma mi ha fatto pensare.
C'è uno scenario in cui scrivere un tale ciclo for avrebbe senso? L'idea mi viene in mente che la lunghezza della "matrice" può cambiare durante l'esecuzione del ciclo for, ma non vogliamo fare un loop oltre la dimensione originale, ma non riesco a immaginare un simile scenario.
Anche la riduzione dell'array all'interno del ciclo non ha molto senso, perché è probabile che si ottenga OutOfBoundsException.
Esiste un modello di progettazione noto in cui questa annotazione è utile?
Modifica Come notato da @ Jerry101 il motivo è la prestazione. Ecco un link al test delle prestazioni che ho creato: http://jsperf.com/ninforloop . A mio avviso, la differenza non è abbastanza grande a meno che non si stia ripetendo un array molto grande. Il codice da cui l'ho copiato aveva solo un massimo di 20 elementi, quindi penso che la leggibilità in questo caso superi la considerazione delle prestazioni.
npotrebbe essere più lenta della variante che utilizza array.Lengthpoiché JITter potrebbe non notare che potrebbe eliminare i controlli dei limiti di array.