Il n'y a absolument aucune différence de sens ou de performance, en JavaScript ou en ActionScript.
var
est une directive pour l'analyseur, et non une commande exécutée au moment de l'exécution. Si un identifiant particulier a été déclaré var
une ou plusieurs fois n'importe où dans un corps de fonction (*), alors toute utilisation de cet identifiant dans le bloc fera référence à la variable locale. Cela ne fait aucune différence si value
est déclaré à l' var
intérieur de la boucle, à l'extérieur de la boucle, ou les deux.
Par conséquent, vous devez écrire ce que vous trouvez le plus lisible. Je ne suis pas d'accord avec Crockford selon lequel mettre tous les vars au sommet d'une fonction est toujours la meilleure chose. Dans le cas où une variable est utilisée temporairement dans une section de code, il est préférable de déclarer var
dans cette section, afin que la section soit autonome et puisse être copiée-collée. Sinon, copiez-collez quelques lignes de code dans une nouvelle fonction pendant la refactorisation, sans sélectionner et déplacer séparément l'associé var
, et vous obtenez un global accidentel.
En particulier:
for (var i; i<100; i++)
do something;
for (var i; i<100; i++)
do something else;
Crockford vous recommandera de supprimer le second var
(ou supprimez les deux var
s et faites var i;
ci - dessus), et jslint se plaindra de vous pour cela. Mais OMI, il est plus var
facile de conserver les deux s, en gardant tout le code associé ensemble, au lieu d'avoir un bit de code supplémentaire facilement oublié en haut de la fonction.
Personnellement, j'ai tendance à déclarer comme var
la première affectation d'une variable dans une section indépendante de code, qu'il y ait ou non une autre utilisation distincte du même nom de variable dans une autre partie de la même fonction. Pour moi, avoir à déclarer var
est une verrue JS indésirable (il aurait été préférable d'avoir des variables par défaut sur local); Je ne considère pas qu'il soit de mon devoir de dupliquer également les limitations d'une [ancienne révision de] ANSI C en JavaScript.
(*: autre que dans les corps de fonction imbriqués)