Comprendre la portée et la portée lexicale est fondamentale pour écrire du code JavaScript efficace et sans erreur. Ces concepts dictent la manière dont les variables sont accessibles et où elles sont disponibles dans votre code.
Portée fait référence au contexte actuel d'exécution, qui détermine la visibilité et l'accessibilité des variables. JavaScript a trois types de portée :
Exemple :
{ let a = 10; const b = 20; console.log(a, b); // Output: 10, 20 } console.log(a); // Error: a is not defined
Exemple :
function testFunctionScope() { if (true) { var x = 10; // Function-scoped } console.log(x); // Output: 10 } testFunctionScope();
Exemple :
var globalVar = "I am global"; console.log(globalVar); // Output: I am global
Portée lexicale signifie que la portée d'une variable est déterminée par sa position dans le code source. Les fonctions sont exécutées en utilisant la chaîne de portée qui était en place lorsqu'elles ont été définies, et non lorsqu'elles sont invoquées.
La chaîne de portées est une hiérarchie de portées que JavaScript utilise pour résoudre les références de variables. Si une variable n'est pas trouvée dans la portée actuelle, elle recherche dans la portée externe, en continuant jusqu'à ce qu'elle atteigne la portée globale.
Exemple :
function outer() { let outerVar = "I'm outer"; function inner() { console.log(outerVar); // Accesses the outer scope } inner(); } outer(); // Output: I'm outer
Les fonctions internes ont accès aux variables dans leurs fonctions externes en raison de la portée lexicale.
Exemple :
function outerFunction() { let outerVariable = "Outer"; function innerFunction() { let innerVariable = "Inner"; console.log(outerVariable); // Outer console.log(innerVariable); // Inner } innerFunction(); } outerFunction();
function createMultiplier(multiplier) { return function (value) { return value * multiplier; // Accesses 'multiplier' from outer scope }; } const double = createMultiplier(2); console.log(double(5)); // Output: 10
Les fermetures s'appuient sur la portée lexicale pour mémoriser les variables de leur environnement extérieur.
Exemple :
function outerFunction() { let count = 0; return function () { count++; console.log(count); }; } const counter = outerFunction(); counter(); // Output: 1 counter(); // Output: 2
Les variables déclarées sans let, const ou var deviennent des variables globales.
{ let a = 10; const b = 20; console.log(a, b); // Output: 10, 20 } console.log(a); // Error: a is not defined
L'utilisation de var à l'intérieur d'un bloc conduit à des résultats inattendus.
function testFunctionScope() { if (true) { var x = 10; // Function-scoped } console.log(x); // Output: 10 } testFunctionScope();
Une variable déclarée dans une portée imbriquée peut masquer (remplacer) une variable dans la portée externe.
var globalVar = "I am global"; console.log(globalVar); // Output: I am global
Scope | Lexical Scope |
---|---|
Refers to the context in which variables are accessible. | Refers to how the location of variables in the code determines scope. |
Can be global, block, or function. | Depends on the structure of the code when it is written. |
Dynamic during runtime. | Fixed during code definition. |
function outer() { let outerVar = "I'm outer"; function inner() { console.log(outerVar); // Accesses the outer scope } inner(); } outer(); // Output: I'm outer
La maîtrise de ces concepts est essentielle pour déboguer et écrire du code JavaScript efficace.
Bonjour, je m'appelle Abhay Singh Kathayat !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!