Je n'ai pas effectué de programmation javascript sérieuse depuis un moment et j'écris un guide d'introduction à la langue pour certains de mes collègues. J'aimerais discuter de bonnes pratiques en boucle, mais il y a un petit détail que j'ai gardé à l'arrière de ma tête:
Lorsque vous bouclez des tableaux, je me souviens que le modèle suivant n'est pas sûr d'être utilisé car il existe des navigateurs majeurs Cela ne le supporte pas: p> à la place, le mot-clé VaR doit être déplacé hors du tableau, comme tel: p> est-ce correct? J'ai fouillé le filet et je ne peux pas confirmer cela. Certains vieux navigateurs ne supportent pas la première méthode? Sinon, lesquels ne sont pas? P> p>
6 Réponses :
à la place, le mot-clé VaR doit être déplacé hors du tableau p>
Pas nécessairement. Le point est que vous ne devez pas oublier
var code> par mot-clé avant
i code> sinon il se transformera en une variable forte> globale forte>. Donc, c'est bien si vous le faites: p>
xxx pré> Vous pouvez améliorer les performances
forêt> de code ci-dessus en créant une variables qui contiennent cette longueur de la matrice / Collection plutôt que de le lire à nouveau et à nouveau avec chaque itération: p> for (var i = 0, len = ls.length; i < len; i++) { ... }
Off-sujets, mais ce n'est pas la première fois que j'ai entendu que la conservation de la longueur d'une variable est une optimisation importante. Quel est le navigateur sous la hotte? Je penserais que la longueur de la longueur devrait être une recherche de temps constante, pas une chose qui est calculée, jamais.
@thebossman: En JavaScript, tout est un objet. Dans la boucle, le tableau que vous utilisez est également un objet. Bien que dans la boucle, sa valeur est relue à nouveau et à nouveau avec chaque itération, par exemple, JS accède à la propriété d'Array avec chaque itération qui prend plus de temps que de créer une variable et de l'affectation de la longueur. Bien sûr, pour la plupart des utilisateurs ou des applications, ce n'est pas une grande quantité de problème, mais pour des applications orientées vers la performance ou massives, elle devient une étape cruciale.
@thebossman: Oui, mais vous devez le regarder souvent. Le stocker dans une variable locale signifie encore un accès plus rapide.
@Safraz pour que l'accès à la propriété est cher? On dirait que l'interpréteur / compilateur devrait l'optimiser. Intéressant, merci.
"Est-ce correct?" em> p> blockQuote>
Sauf si nous parlons de certains, vraiment ancien navigateur, je ne suis pas au courant d'un tel problème avec les navigateurs utilisés aujourd'hui. P>
Le seul problème des personnes susceptibles d'avoir avec le premier exemple est que cela peut confondre quelqu'un dans la pensée que JavaScript a bloquer la portée em>, que ce n'est pas
cela changé depuis l'ES6, qui a bloquer la portée forte>. p> Dans l'un ou l'autre exemple, la variable
i code> sera définie dans l'environnement variable enfermé, que l'environnement joint est une fonction ou l'environnement global. P>
En supposant que vous n'utilisez aucun navigateur plus ancien que IE6, cela ne devrait pas être un problème. P>
Ni dans IE 3.02 ni Netscape 2.0
Pas que vous l'avez demandé, mais vous pouvez utiliser JQuery pour le faire comme suit:
$.each(ls, function(i,value){ ... });
JavaScript déclare effectivement la portée de la fonction de niveau de fonctionnement. Les variables déclarées sont hissées au sommet de leur fonction. Ce que je dis, c'est que vos exemples sont réellement identiques. Même avec le mot-clé La seule chose que vous devez rechercher est si vous omettez le var code> dans l'instruction code> pour code>, la variable
i code> sera accessible en dehors de la boucle. P>
var code> La variable sera globale au lieu de confiner la fonction. P>
heurté à ceci aujourd'hui My Jscript était dans un fichier XSL appelé à partir d'un fichier HTML - a fonctionné bien dans IE, mais pas sur d'autres navigateurs - le code ne s'affiche et rien affiché p> Heureusement, je pourrais le changer, ce qui a fonctionné pour tous les navigateurs testés P> for(var i=0; i != t; i++) {
do whatever}
Personnellement, je ne peux penser à aucun navigateur où le premier exemple échouerait.
Aucun navigateur utilisé en 2012 ne supporte l'une ou l'autre de ceux-ci. Ils sont exactement les mêmes. (Quand je dis «Utilisation commune», je veux dire utilisé par plus d'un ou deux cas périphériques; peut-être que quelqu'un couronne Netscape 3 quelque part, mais vous obtenez la photo. Et Netscape 3 a probablement travaillé.)
Quel âge cherche-tu à obtenir? Parlons-nous Netscape et IE3 ou faites-vous référence à IE7 Timeframe?
Dans le temps (certes pas aussi long), je codis avec JavaScript, je ne me souviens pas de passer des problèmes lors de l'utilisation de la première méthode. Quelles versions de quel navigateur cherchez-vous à soutenir? Ne devrait pas être trop difficile à tester si vous avez accès à tous.
Aussi, avant de vous assommer sur ce projet, la quantité d'informations de didacticiel JavaScript de bonne qualité sur le Web est incroyable. Il existe littéralement des milliers de tels tutoriels, ainsi que de nombreux livres à jour.
J'ai codé cela depuis 1996 dans IE3.02 et NS2.x, cela fonctionnerait simplement bien
@Pointy, Jeff v: Je ne couvre certainement aucun territoire avant IE7, si cela. Ceci est censé être un guide superficiel adapté à nos cas d'utilisation en tant que société d'application mobile (principalement). La plupart de notre code sont écrits pour les implémentations mobiles WebKit; Je veux juste m'assurer que j'ai mes faits hétéro.