Comme nous le savons, javascript n'a pas BLOCK SCOPE
, alors quand je l'ai écrit une boucle comme ci-dessous:Comment déclarer une variable curseur en javascript?
list = [1, 2, 3, 4];
// notice about the `var` keyword
for(var i = 0; i < list.length; ++i) {
// Do something.
}
console.log(i); // shows 4
La question est la suivante: dois-je utiliser var
de déclarer la i
variable?
SO SI:
Quand j'ai deux ou plusieurs consécutifs pour la boucle, je veux l'utiliser sera déclarer plus d'une fois le même curseur variables i
,! Cela a simplement un problème!
for(var i = 0; i < list1.length; ++i) {
// do something.
}
for(var i = 0; i < list2.length; ++i) {
// do something.
}
// `i` was declared more than once!
Sous cette forme, la variable du curseur i
déclaré peut-être plus d'une fois, et le code lui-même implique que la variable i
est susceptible d'avoir une portée à l'intérieur du bloc pour, mais pas en effet.
SINON SO:
Dois-je déclarer explicitement tous pour les curseurs plus tôt dans la fonction?
var i, j, k; // and maybe a long list that I didn't expected?
// Maybe some other code.
for(i = 0; i < count1; ++i) {
// do something
}
for(j = 0; j < count2; ++j) {
// do something
}
for(k = 0; k < count3; ++k) {
// do something
}
Si je code de cette façon, je pense que le code est terrible: il a une longue distance entre la déclaration et l'utilisation, et obscure de ce qu'ils sont lorsqu'ils sont déclarés.
Si j'omets les déclarations pour tous, et que j'utilise simplement, ces variables de curseur tombent dans globals! C'est beaucoup plus terrible!
Donc je demande une bonne pratique, comment déclarer la variable curseur dans ce cas?
Besoin de votre aide.
Il y a une portée de bloc dans _some_ JavaScript: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let –
@MattBall bien, mais il semblait pas largement pris en charge, j'ai échoué pour l'utiliser sous le débogueur chrome. –
Les deux façons font la même chose, et les deux pratiques sont bien établies. – Bergi