Cela ne fonctionne que si le var y
comme cela a été le cas précédemment défini sinon y
sera mondial .
Dans ce cas, vous avez intérêt à le faire :
var x, y;
x = y = 'value';
Chaînage des affectations
Un autre anti-modèle qui crée des globaux implicites consiste à enchaîner des affectations dans le cadre d'un fichier déclaration var. Dans l'extrait suivant, a
est local mais b
devient global, ce qui est probablement pas ce que vous vouliez faire :
// antipattern, do not use
function foo() {
var a = b = 0;
// ...
}
Si vous vous demandez pourquoi cela se produit, c'est à cause de l'évaluation de droite à gauche. Premièrement, l'expression b = 0
est évalué et dans ce cas, b n'est pas déclaré. La valeur de retour de cette expression est 0
et il est assigné à la nouvelle variable locale déclarée avec var a
. En Autrement dit, c'est comme si vous aviez tapé :
var a = (b = 0);
Si vous avez déjà déclaré les variables, l'enchaînement des affectations est correct et ne crée pas d'erreur. globaux inattendus . Exemple :
function foo() {
var a, b;
// ...
a = b = 0; // both local
}
" JavaScript Patterns ", par Stoyan Stefanov (O'Reilly). Copyright 2010 Yahoo !, Inc., 9780596806750."