for (var i = 0; child && i < child.length; i++) { var obj = child[i]; var kind = child[i].kind; var deiveId = child[i].id; if (kind == "4") {//分支1 // do sometjing }else{//分支2 for(i in arr){ //do something } }
Der obige Code erzeugt ein scheinbar seltsames Problem, das heißt, wenn überhaupt! Im Fall von Zweig 2 von =4 kehrt manchmal die äußere for-Schleife zurück, das heißt: Die äußerste Schleife hat offensichtlich das letzte Kind erreicht. Nach dem Ausführen von Zweig 2 wird die äußere for-Schleife zurückgedreht erneut ausführen.
Ursachenanalyse:
Ich denke, Profis, die nicht so schlecht sind wie ich, werden feststellen, dass das Problem in der Variableni liegt, wo ich nicht werden werde Blockebenenvariable, aber die -Funktionsebene Die Änderung in i in Zweig 2 führt dazu, dass sich die äußere Schicht i ändert, wodurch die Schleife zurückgedreht wird.
js hatte vor ES6 keinen Bereich auf Blockebene und war nur in einen globalen Bereich und einen Bereich auf Funktionsebene unterteilt. Hier ist i der Bereich auf Funktionsebene, und wenn wir ihn verwenden, um eine Schleife Index , es ist tatsächlich so, dass es als Bereich auf Blockebene verwendet werden soll.
Lösung
Wenn Sie den Bereichseffekt auf Blockebene erzielen möchten, können Sie das let-Schlüsselwort der ES6-Syntax verwenden:for(let i=0;i<arr.length;i++){ }
anderen verwandten Artikeln!
Empfohlene Lektüre:Zusammenfassung häufig verwendeter CSS-Stile
Detaillierte Erläuterung des Unterschieds zwischen der Verwendung von Component und PureComponent
Das obige ist der detaillierte Inhalt vonBei der Verwendung des JS-Variablenbereichs sind Fehler aufgetreten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!