En JavaScript, var est utilisé pour déclarer des variables, mais cette syntaxe n'est pas strictement obligatoire. Dans de nombreux cas, on peut utiliser une variable directement sans la déclarer avec var.
Le code est le suivant :
window. y = "hello"; function func(){ y = "OH, NO!!!"; } func(); alert(window.y); //#=> display "OH, NO!!!"
Lorsqu'un calque du contexte a une telle variable définie "implicitement", la variable de ce calque sera modifiée sans générer de nouvelle variable dans la fenêtre. (Ce genre de bug est aussi assez gênant, surtout lors de l'encapsulation de code plus complexe)
Par exemple :
Le code est le suivant :
var x = "window.x"; function a() { var x = "a's x"; var b = function() { var c = function() { //no var! x = "c's x:"; }; alert("before c run,the b.x:" + x); c(); alert("after c run, the b.x:" + x); }; alert("a.x is:" + x); b(); alert("after b function runed, the a.x is:" + x); }; alert("before a run, window.x:" + x); a(); alert("after a run, window.x:" + x);
Il y a les couches suivantes : window, func a, func b, func c sont toujours imbriquées hiérarchiquement. fenêtre->a->b->c
Dans window et a, la variable x est définie, mais dans b la variable n'est pas définie. Dans c, un x est déclaré « implicitement », et le x modifie finalement la valeur de la variable a.
N'oubliez pas qu'en JavaScript, lors de la déclaration d'une variable, celle-ci doit être précédée de var.