07
fév.
2009
fév.
2009
JavaScript Quiz #3
Java / JEE ›
Java Quiz
|
Tags :
javascript
Par Olivier Descout
Qu'insère le bloc JavaScript suivant dans la page HTML ?
var flagBidon = true; function test() { var x = 5; document.write(x); document.write("<br/>"); if (flagBidon) { var x = 10; document.write(x); document.write("<br/>"); } document.write(x); document.write("<br/>"); } test();
Réponse :
5 10 10
Explication :
Comme je l'indiquais dans la réponse du précédent quiz, JavaScript ne gère pas la portée des variables comme en C, en C++ ou en Java.
En fait, il n'existe que 2 portées en JavaScript :
- globale : lorsque la variable n'est pas préalablement déclarée ;
- locale à la fonction : lorsque la variable est déclarée avec
var
.
Par contre, la portée locale au bloc n'existe pas en JavaScript, contrairement à C, C++ ou Java. Donc ici, le var x = 10;
ne fait que redéclarer une variable locale x
qui est déjà définie. Du coup, JavaScript ignore cette redéclaration.
C'est donc la même variable locale x
qui est modifiée dans le bloc if
. Modification que, logiquement, la variable x
conserve une fois que l'on est sorti du bloc if
...
Commentaires
C'est d'ailleurs faux depuis l'introduction de let ! Maintenant, le block scope existe.
(et oui, c'est de la nécrologie :D)