UPDATE:
Viele der alten Tricks in diese Antworten sind für interpretiert JS in älteren Browsern.
In jeder modernen JS-Implementierung, einschließlich aller modernen Browser, Node und den neuesten mobilen Webansichten, können Inline-Funktionen tatsächlich vom JIT (JS-Compiler) zwischengespeichert werden, wodurch forEach typischerweise eine viel schnellere Option für Array-Iteration ist. Früher war das Gegenteil der Fall, wenn das wiederholte Aufrufen einer Funktion wiederholt einen Aufbau-/Abbauprozess erforderte, der die Leistung einer nicht-trivialen Schleife erheblich verringern könnte.
Für die beste Leistung würde ich vermeiden, auf etwas zu verweisen, das nicht als Argument übergeben oder in der Funktion selbst definiert wurde, wenn Sie nicht müssen. Ich bin mir nicht 100% sicher, dass das wichtig ist, aber ich konnte sehen, warum es möglich ist.
Getter-Werte, die jede Art von Lookup-Prozess wie Array-Längen oder DOM-Knoten-Eigenschaften beinhalten, werden wahrscheinlich auch noch am besten im Cache einer Variablen gespeichert.
Aber darüber hinaus würde ich versuchen, lassen Sie einfach das grundlegende Prinzip der Arbeitsvermeidung führen Sie Ihre perf Bemühungen. Die Vorberechnung von Dingen, die nicht in einer Schleife neu berechnet werden müssen, oder das Zwischenspeichern eines Abfrage-Selektor-Ergebnisses auf var, anstatt wiederholt im DOM zu stöbern, sind gute Beispiele dafür. Zu hart zu versuchen, das JIT-Verhalten zu nutzen, wird wahrscheinlich ziemlich geheimnisvoll werden und wahrscheinlich nicht im Laufe der Zeit oder über alle JITs hinweg bestehen.
ALTE ANTWORT:
Okay, Wand des Textes vergessen. Aufzählungszeichen:
var i = someArray.length; //length is cached
someArray.reverse(); //include this only if iterating in 0-(length-1) order is important
while(i--){
//run a test statement on someArray[i];
}
Länge zwischengespeichert wird und unverzüglich in den Index
Der Vorteil rückwärts in JS AFAIK Iterieren ist ein logischer Operator mit zwei Operanden zu vermeiden. In diesem Fall bewerten wir nur eine Nummer. Es ist wahr oder es ist Null und falsch.
Ich finde es auch elegant.
'forEach' hat wahrscheinlich einige native Optimierungen oder etwas. –
Was mehr ist, erhalten Sie nicht einmal den Wert aus dem Array in Testfall 1, Sie loggen ich anstelle von 'Array [i] ' –
1) Sie sollten das Array nicht bei jedem Test erstellen, die Sie definieren können vars, die bei allen Tests verfügbar sein werden 2) Sie überprüfen '.length' jede Schleife – ajax333221