Il n'y a absolument aucune différence de sens ou de performance, en JavaScript ou en ActionScript.
varest 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é varune 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 valueest déclaré à l' varinté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 vardans 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 vars et faites var i;ci - dessus), et jslint se plaindra de vous pour cela. Mais OMI, il est plus varfacile 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 varla 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 varest 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)