En AS3, je crois que vous devriez initialiser toutes les variables à l’extérieur de boucles pour des performances accrues. Est-ce le cas avec JavaScript ainsi ? Qui est mieux / plus rapide / meilleures pratiques ?
ou
En AS3, je crois que vous devriez initialiser toutes les variables à l’extérieur de boucles pour des performances accrues. Est-ce le cas avec JavaScript ainsi ? Qui est mieux / plus rapide / meilleures pratiques ?
ou
Il n'y a absolument aucune différence de sens ou de performance, en JavaScript ou ActionScript.
var
est une directive de l'analyseur, et pas une commande exécutée au moment de l'exécution. Si un identifiant particulier a été déclarée var
une fois ou plus n'importe où dans un corps de la fonction(*), toute utilisation de cet identifiant dans le bloc ferons référence à la variable locale. Il ne fait aucune différence si value
est déclarée var
à l'intérieur de la boucle, en dehors de la boucle, ou les deux.
Par conséquent, vous devriez écrire à celui qui vous est le plus lisible. Je suis en désaccord avec Crockford, mettre tous les vars au sommet d'une fonction est toujours la meilleure chose. Pour le cas où une variable est utilisée temporairement dans une section de code, c'est mieux de déclarer var
dans cette section, afin que la section est autonome et peut être copié et collé. Sinon, copier-coller quelques lignes de code pour une nouvelle fonction au cours de refactoring, sans séparément la cueillette et le déplacement de la associée var
, et vous avez vous-même un accident global.
En particulier:
for (var i; i<100; i++)
do something;
for (var i; i<100; i++)
do something else;
Crockford va vous conseillons de retirer le deuxième var
(ou de retirer les deux var
s et n' var i;
ci-dessus), et jslint sera whinge à vous pour cette. Mais IMO c'est plus facile à gérer pour garder à la fois var
s, en gardant tout le code relatives à l'ensemble, au lieu d'avoir un extra, facilement oublié de bits de code au début de la fonction.
Personnellement, j'ai tendance à déclarer var
à la première affectation d'une variable dans une section indépendante de code, si oui ou non il y a une autre utilisation séparée du même nom de variable dans une autre partie de la même fonction. Pour moi, d'avoir à déclarer var
à tous est un indésirable JS verrue (il aurait été mieux d'avoir des variables par défaut en local), je ne vois pas ça comme de mon devoir dupliquer les limites de [une ancienne version de] C ANSI en JavaScript.
(*: autres que dans les corps de fonction)
En théorie, il ne devrait pas faire de différence en JavaScript, car la langue n'a pas de bloc de portée, mais seulement en fonction de la portée.
Je ne suis pas sûr au sujet de la performance de l'argument, mais Douglas Crockford recommande toujours l' var
des déclarations devraient être les premières déclarations dans le corps de la fonction. En citant le Code de Conventions pour le JavaScript Langage de Programmation:
JavaScript n'a pas de bloc de portée, afin de définir des variables dans les blocs peuvent confondre les programmeurs qui ont de l'expérience avec d'autres C de la famille des langues. Définir toutes les variables dans le haut de la fonction.
Je pense qu'il a un point, comme vous pouvez le voir dans l'exemple suivant. Déclarer les variables au sommet de la fonction ne doit pas confondre les lecteurs à penser que la variable i
est détenu dans le champ d'application de l' for
boucle bloc:
function myFunction() {
var i; // the scope of the variables is very clear
for (i = 0; i < 10; i++) {
// ...
}
}
L' ECMA-/Javascript
langue hoists
de la variable qui est déclarée n'importe où dans le haut d'une fonction. C'est parce que cette langue n' ont function scope
et ne pas avoir block scope
comme beaucoup d'autres C-comme les langues.
Qui est également connu comme lexical scope
.
Si vous déclarez quelque chose comme
var foo = function(){
for(var i = 0; i < 10; i++){
}
};
Cela devient hoisted
:
var foo = function(){
var i;
for(i = 0; i < 10; i++){
}
}
Donc, il ne fait aucune différence dans la performance (Mais corrigez-moi si je suis totalement faux).
Un bien meilleur argument pour ne pas déclarer une variable quelque part d'autre que dans le haut d'une fonction est la lisibilité. La déclaration d'une variable à l'intérieur d'un for-loop
pourrait conduire à la mauvaise hypothèse que cette variable ne peut être consulté dans le corps de la boucle, ce qui est totalement faux. En effet, vous pouvez accéder à cette variable n'importe où dans le champ d'application actuel.
L’année prochaine, tous les navigateurs auront des moteurs JS précompiler le code afin de la différence de performance (qui provient de l’analyse du même bloc de code encore et encore plus l’exécution de l’assignation) devrait être négligeable.
Aussi, ne jamais optimiser les performances à moins que vous ayez à. Garder les variables à proximité de l’endroit où vous avez besoin d’eux la première fois votre code maintient propre. Côté négatif, les gens qui sont habitués aux langues avec des portées de bloc peuvent être confus.
J’ai juste fait un test simple en Chrome
Il en résulte que le dernier test prend environ 8 secondes et les 2 précédents sont seulement environ 2 secondes. Très répétable et peu importe l’ordre.
Donc, cela me prouve, que l'on doit toujours déclarer la puissance réactive à l’extérieur de la boucle. Etrange pour moi est le premier où je déclare `` dans l’instruction for (). Celui-ci semble être aussi rapides que le 2ème test où j’ai préalablement déclarer l’index.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.