La portée fait référence à la disponibilité de variables et de fonctions dans certaines parties du code.
En JavaScript, une variable a deux types de portée :
- Portée globale
- Portée locale
Portée globale
Une variable déclarée en haut d’un programme ou en dehors d’une fonction est considérée comme une variable de portée globale.
Voyons un exemple de variable de portée globale.
// program to print a text let a = "hello";function greet () { console.log(a);}greet(); // hello
Dans le programme ci-dessus, la variable a est déclarée en haut d’un programme et est une variable globale. Cela signifie que la variable a
peut être utilisée n’importe où dans le programme.
La valeur d’une variable globale peut être modifiée à l’intérieur d’une fonction. Par exemple,
// program to show the change in global variablelet a = "hello";function greet() { a = 3;}// before the function callconsole.log(a);//after the function callgreet();console.log(a); // 3
Dans le programme ci-dessus, la variable a est une variable globale. La valeur de a est bonjour. Ensuite, la variable a est accessible à l’intérieur d’une fonction et la valeur passe à 3.
Par conséquent, la valeur de a change après l’avoir modifiée à l’intérieur de la fonction.
Note: Il est recommandé d’éviter d’utiliser des variables globales car la valeur d’une variable globale peut changer dans différents domaines du programme. Il peut introduire des résultats inconnus dans le programme.
En JavaScript, une variable peut également être utilisée sans la déclarer. Si une variable est utilisée sans la déclarer, cette variable devient automatiquement une variable globale.
Par exemple,
function greet() { a = "hello"}greet();console.log(a); // hello
Dans le programme ci-dessus, la variable a est une variable globale.
Si la variable était déclarée en utilisant let a = "hello"
, le programme déclencherait une erreur.
Note: En JavaScript, il existe "strict mode";
dans lequel une variable ne peut pas être utilisée sans la déclarer. Pour en savoir plus sur strict, visitez JavaScript Strict.
Portée locale
Une variable peut également avoir une portée locale, c’est-à-dire qu’elle n’est accessible qu’au sein d’une fonction.
Exemple 1: Variable de portée locale
// program showing local scope of a variablelet a = "hello";function greet() { let b = "World" console.log(a + b);}greet();console.log(a + b); // error
Sortie
helloWorldUncaught ReferenceError: b is not defined
Dans le programme ci-dessus, la variable a est une variable globale et la variable b est une variable locale. La variable b n’est accessible qu’à l’intérieur de la fonction greet. Par conséquent, lorsque nous essayons d’accéder à la variable b en dehors de la fonction, une erreur se produit.
let est à portée de bloc
Le mot clé let
est à portée de bloc (la variable n’est accessible que dans le bloc immédiat).
Exemple 2: Variable à portée de bloc
// program showing block-scoped concept// global variablelet a = 'Hello';function greet() { // local variable let b = 'World'; console.log(a + ' ' + b); if (b == 'World') { // block-scoped variable let c = 'hello'; console.log(a + ' ' + b + ' ' + c); } // variable x cannot be accessed here console.log(a + ' ' + b + ' ' + c);}greet();
Sortie
Hello WorldHello World helloUncaught ReferenceError: x is not defined
Dans le programme ci-dessus, la variable
- a est une variable globale. Il est accessible n’importe où dans le programme.
- b est une variable locale. Il n’est accessible qu’à l’intérieur de la fonction
greet
. - c est une variable à portée de bloc. Il n’est accessible qu’à l’intérieur du bloc d’instructions
if
.
Par conséquent, dans le programme ci-dessus, les deux premiers console.log()
fonctionnent sans aucun problème.
Cependant, nous essayons d’accéder à la variable c à portée de bloc en dehors du bloc dans le troisième console.log()
. Cela va générer une erreur.
Remarque: En JavaScript, var
est la portée de la fonction et let
est la portée du bloc. Si vous essayez d’utiliser var c = 'hello';
dans l’instruction if
dans le programme ci-dessus, l’ensemble du programme fonctionne, car c est traité comme une variable locale.
Pour en savoir plus sur let
par rapport à var
, visitez JavaScript let vs var.