Vous aimez ce que vous lisez sur ce blog ?
Envie d'aller plus loin avec véritable formation d'expertise en Java ?
Venez suivre ma formation Masterclasse Expertise Java !

"Même un développeur experimenté a besoin de continuer à apprendre. Et dans cette formation... j'ai appris beaucoup !" - A.G., Java Champion

Sessions intra-entreprises sur demande : contact[at]mokatech.net.
Inscrivez-vous vite !

JavaScript Quiz #3

Qu'insère le bloc JavaScript suivant dans la page HTML ?

  1. var flagBidon = true;
  2.  
  3. function test() {
  4. var x = 5;
  5.  
  6. document.write(x);
  7. document.write("<br/>");
  8.  
  9. if (flagBidon) {
  10. var x = 10;
  11. document.write(x);
  12. document.write("<br/>");
  13. }
  14.  
  15. document.write(x);
  16. document.write("<br/>");
  17. }
  18.  
  19. 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

1. Le mercredi 11 août 2010, 11:02 par Mogzor

C'est d'ailleurs faux depuis l'introduction de let ! Maintenant, le block scope existe.
(et oui, c'est de la nécrologie :D)

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.