Ob der Längenwert in der for-Schleife zwischengespeichert werden muss, glaube ich, dass viele Programmierer mit diesem Problem zu kämpfen haben. Die Analyse dieses Problems finden Sie weiter unten:
Bei der JS-Leistungsoptimierung gibt es eine häufige kleine Optimierung, nämlich
// 不缓存 for (var i = 0; i < arr.length; i++) { ... } // 缓存 var len = arr.length; for (var i = 0; i < len; i++) { ... }
Sollten wir also auf diese Schreibweise verzichten? Nein, es gibt eine andere Situation, in der diese Schreibweise verwendet werden muss.
Bitte sehen Sie sich das Beispiel an:
Der obige Code verursacht eine Endlosschleife: Die erste Codezeile ruft die Knotenliste aller div-Elemente ab. Da die Knotenliste dynamisch ist, wird die nächste for-Schleife aktualisiert, solange der Seite ein neues div hinzugefügt wird Die divs.length wird erneut ausgewertet, sodass i und divs.length jedes Mal gleichzeitig erhöht werden. Infolgedessen werden ihre Werte niemals gleich sein, wodurch eine Endlosschleife entsteht.
Wenn Sie also eine Knotenliste iterieren möchten, ist es am besten, die zweite Variable mit dem Längenattribut zu initialisieren und dann den Iterator mit der Variablen zu vergleichen. Der geänderte Code lautet wie folgt:
In diesem Beispiel wird len zu Beginn der Schleife initialisiert, wodurch das Problem der Endlosschleife vermieden wird, das im vorherigen Beispiel aufgetreten ist, wenn eine Schleifeniteration erforderlich ist Knotenliste, Es ist sicherer, diese Methode zu verwenden.
Zusammenfassung:
1. Ob das Zwischenspeichern des Längenwerts für die Leistungsoptimierung von Vorteil ist, muss anhand der spezifischen Situation beurteilt werden. Im Allgemeinen ist die Reduzierung des Zugriffs auf das DOM immer noch vorteilhaft
2. Wenn Sie eine Knotenliste ausführen müssen, wird empfohlen, den Längenwert zwischenzuspeichern, um eine Endlosschleife zu vermeiden.