Appliquer la notion
Question
Que se passe-t-il si on définit dans une boucle if une variable locale portant le même nom qu'une variable globale déjà déclarée préalablement ?
Expliquez à partir de l'exécution du code suivant :
/** JavaScript */var numberApple = 30
var enoughApple = false
console.log(numberApple)
if(numberApple === 30)
{let enoughApple = true
console.log('A-t-on assez pommes ? (dans le "if")', enoughApple)
}
console.log('A-t-on assez pommes ? (en dehors du if)', enoughApple)
Solution
Une variable
enoughAppleest d'abord définie comme globale et initialisée avecfalse.Ensuite une autre variable
enoughAppleest définie localement au blocif: elle porte le même nom, mais c'est une autre case mémoire qui est utilisée. Elle est initialisée avec valeurtrue, dans ce bloc la première variable n'est pas accessible, donc la valeur affichée est bientrue.Le second affichage de
enoughAppleest demandé en dehors du blocif, la variableenoughApplelocale n'existe plus et c'est bien la variable globale, qui vaut toujoursfalse, qui est retournée.
Question
Faut-il obligatoirement initialiser une variable globale (comme pour les constantes), ou est-il possible de les déclarer sans les initialiser (comme pour les déclarations utilisant let) ? Essayez.
Solution
Il est possible de déclarer une variable globale sans l'initialiser (mais ce n'est pas recommandé) qui prendra la valeur undefined jusqu'à ce qu'elle soit affectée.
/** JavaScript */var numberApple = 30
var enoughApple
console.log(numberApple)
if(numberApple === 30)
{let enoughApple = true
console.log('A-t-on assez pommes ? (dans le "if")', enoughApple)
}
console.log('A-t-on assez pommes ? (en dehors du if)', enoughApple)
Question
Qu'affiche le programme suivant ?
/** JavaScript */console.log(flowers)
var flowers = 25
Solution
Le programme va afficher undefined, car la variable flowers a une portée globale mais seulement à partir de la ligne où elle est définie. En attendant, elle est bien indéfinie.