Les scoop correspondent a la portée d’une variable :
if(x!=0){ let x = 2
x++
console.log(x)
}
console.log(x)
Dans l’exemple ci dessus on aura l’erreur x is not defined parce que la portée de la variable est limitée au if.
if(x!=0){
var x = 2
x++
console.log(x) // >>> 3
}
console.log(x) // >>> 3
Ici la variable x est globale : elle est donc accessible en dehors du if.
Lorsque vous utilisez var la portée de votre variable correspond au contexte d’exécution (c’est a dire la fonction dans la quelle elle est définie ou si elle est définie en dehors sa portée est alors globale).
var z = 1 // >>> ici la variable est globale car définie en dehors d'une fonction
const x = () => { var y = 2 // >>> ici la variable est locale globale dans le contexte d'exécution de la fonction
console.log(y) // >>> 2
console.log(z) // >>> 1
}
console.log(z) // >>> 2
console.log(y) // >>> y is not definedif
(true){
var x= 3 // >>> ici la variable est globale car définie en dehors d'une fonction
console.log(x)// >>> 3
}
console.log(x) // >>> 3
La portée d’une variable définie avec let est de son bloc et des blocs contenus à l’intérieur.
if(true){
let w = 0 // w a une portée dans ce if et tout les sous blocs de ce if
if(true){
console.log(w) // >>> 0
}
}
console.log(w) // >>> w is not defined
Const a la même portée qu’une variable définie avec let. Sa différence avec let et var est que la valeur d’une variable définie avec const ne peut pas être changée (ici on parle uniquement de l’objet).
const v = 3
v++ // >>> Assignment to constant variable
const u = {x:1}
u.x++ // ici l'objet n'est pas modifier (seul le contenu change donc il n'y a pas d'erreurs)
console.log(u.x) // >>> 2