Ich habe die folgende Schleifenanmerkung in einem großen Projekt gefunden, an dem ich arbeite (Pseudocode):
var someOtherArray = [];
for (var i = 0, n = array.length; i < n; i++) {
someOtherArray[i] = modifyObjetFromArray(array[i]);
}
Was meine Aufmerksamkeit auf sich gezogen hat, ist diese zusätzliche "n" -Variable. Ich habe noch nie einen so geschriebenen for lop gesehen.
Offensichtlich gibt es in diesem Szenario keinen Grund, warum dieser Code nicht folgendermaßen geschrieben werden konnte (was ich sehr gewohnt bin):
var someOtherArray = [];
for (var i = 0; i < array.length; i++) {
someOtherArray[i] = modifyObjetFromArray(array[i]);
}
Aber es hat mich zum Nachdenken gebracht.
Gibt es ein Szenario, in dem das Schreiben einer solchen for-Schleife sinnvoll wäre? Die Idee kommt in den Sinn, dass sich die "Array" -Länge während der Ausführung der for-Schleife ändern kann, aber wir möchten nicht weiter als bis zur ursprünglichen Größe schleifen, aber ich kann mir ein solches Szenario nicht vorstellen.
Das Verkleinern des Arrays innerhalb der Schleife ist ebenfalls nicht sehr sinnvoll, da wir wahrscheinlich OutOfBoundsException erhalten.
Gibt es ein bekanntes Entwurfsmuster, bei dem diese Anmerkung nützlich ist?
Bearbeiten Wie von @ Jerry101 angegeben, ist der Grund die Leistung. Hier ist ein Link zu dem von mir erstellten Leistungstest: http://jsperf.com/ninforloop . Meiner Meinung nach ist der Unterschied nicht groß genug, es sei denn, Sie iterieren durch ein sehr großes Array. Der Code, von dem ich ihn kopiert habe, hatte nur bis zu 20 Elemente, daher überwiegt meiner Meinung nach die Lesbarkeit in diesem Fall die Leistungsaspekte.
nmöglicherweise langsamer als die verwendete Variante, array.Lengthda der JITter möglicherweise nicht bemerkt, dass er die Überprüfung der Array-Grenzen eliminieren kann.