Portée (Scope)
La portée est le contexte d'exécution courant dans lequel les valeurs et les expressions sont « visibles » ou peuvent être référencées. Si une variable ou une expression n'est pas dans la portée courante, elle ne sera pas disponible à l'utilisation. Les portées peuvent aussi être organisées en hiérarchie, de sorte que les portées enfants ont accès aux portées parentes, mais pas l'inverse.
JavaScript comprend les types de portée suivants :
- Portée globale : la portée par défaut pour tout code s'exécutant en mode script.
- Portée de module : la portée pour le code s'exécutant en mode module.
- Portée de fonction : la portée créée par une fonction.
De plus, les identifiants déclarés avec certaines syntaxes, notamment let, const, class ou (en mode strict) function, peuvent appartenir à une portée supplémentaire :
- Portée de bloc : la portée créée par une paire d'accolades (un bloc).
Une fonction crée une portée, de sorte que (par exemple) une variable définie exclusivement à l'intérieur de la fonction ne peut pas être accessible depuis l'extérieur de la fonction ni depuis d'autres fonctions. Par exemple, le code suivant est invalide :
function fonctionExemple() {
const x = "déclarée dans la fonction"; // x ne peut être utilisée que dans fonctionExemple
console.log("Dans la fonction");
console.log(x);
}
console.log(x); // Provoque une erreur
Cependant, le code suivant est valide car la variable est déclarée en dehors de la fonction, ce qui la rend globale :
const x = "déclarée en dehors de la fonction";
fonctionExemple();
function fonctionExemple() {
console.log("Dans la fonction");
console.log(x);
}
console.log("En dehors de la fonction");
console.log(x);
Les blocs limitent la portée des déclarations let et const, mais pas des déclarations var.
{
var x = 1;
}
console.log(x); // 1
{
const x = 1;
}
console.log(x); // ReferenceError: x is not defined
Voir aussi
- Portée sur Wikipédia
- Règles de portée de bloc