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 } }
Le code ci-dessus crée un problème apparemment étrange, c'est-à-dire s'il est gentil ! Dans le cas de la branche 2 = 4, parfois la boucle for externe fera demi-tour, c'est-à-dire que la boucle la plus externe a évidemment atteint le dernier enfant. Après avoir exécuté la branche 2, la boucle for externe revient en arrière et s'exécute. encore.
Analyse des causes :
Je pense que les professionnels qui ne sont pas aussi mauvais que moi trouveront que le problème réside dans la variablei, où je ne deviendrai pas variable de niveau de bloc, mais le niveau fonction . Le changement de i dans la branche 2 entraînera le changement de la couche externe i, provoquant le retour en arrière de la boucle.
JS n'avait pas de portée au niveau du bloc avant ES6 et n'était divisé qu'en portée globale et portée au niveau de la fonction. Ici, je suis la portée au niveau de la fonction, et lorsque nous l'utilisons pour faire une boucle index , c'est en fait Il est destiné à être utilisé comme portée au niveau du bloc.
Solution
Si vous souhaitez obtenir l'effet de portée au niveau du bloc, vous pouvez utiliser le mot-clé let de la syntaxe ES6 :for(let i=0;i<arr.length;i++){ }
autres articles liés au php chinois !
Lecture recommandée :Résumé des styles CSS couramment utilisés
Explication détaillée de la différence entre l'utilisation de Component et PureComponent
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!