Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

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 :

js
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 :

js
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.

js
{
  var x = 1;
}
console.log(x); // 1
js
{
  const x = 1;
}
console.log(x); // ReferenceError: x is not defined

Voir aussi