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
enoughApple
est d'abord définie comme globale et initialisée avecfalse
.Ensuite une autre variable
enoughApple
est 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
enoughApple
est demandé en dehors du blocif
, la variableenoughApple
locale 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.