Maison interface Web js tutoriel Maîtriser la portée et la portée lexicale en JavaScript

Maîtriser la portée et la portée lexicale en JavaScript

Dec 18, 2024 am 01:49 AM

Mastering Scope and Lexical Scope in JavaScript

Portée et portée lexicale en JavaScript

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.


1. Portée en JavaScript

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 :

A. Portée du bloc

  • Les variables déclarées avec let et const ont une portée de bloc, ce qui signifie qu'elles ne sont accessibles que dans le bloc où elles sont définies.
  • Introduit dans ES6.

Exemple :

{
  let a = 10;
  const b = 20;
  console.log(a, b); // Output: 10, 20
}
console.log(a); // Error: a is not defined
Copier après la connexion
Copier après la connexion

B. Portée de la fonction

  • Les variables déclarées avec var sont de portée fonctionnelle. Ils sont accessibles au sein de l'ensemble de la fonction dans laquelle ils sont déclarés.
  • Ne respecte pas les limites des blocs.

Exemple :

function testFunctionScope() {
  if (true) {
    var x = 10; // Function-scoped
  }
  console.log(x); // Output: 10
}
testFunctionScope();
Copier après la connexion
Copier après la connexion

C. Portée mondiale

  • Les variables déclarées en dehors de toute fonction ou bloc sont dans la portée globale et accessibles n'importe où dans le programme.

Exemple :

var globalVar = "I am global";
console.log(globalVar); // Output: I am global
Copier après la connexion
Copier après la connexion

2. Portée lexicale

La

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.

A. Chaîne de portée

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
Copier après la connexion
Copier après la connexion

B. Fonctions imbriquées

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();
Copier après la connexion

3. Exemples pratiques

A. Accès aux variables de portée externe

function createMultiplier(multiplier) {
  return function (value) {
    return value * multiplier; // Accesses 'multiplier' from outer scope
  };
}

const double = createMultiplier(2);
console.log(double(5)); // Output: 10
Copier après la connexion

B. Portée lexicale dans les fermetures

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
Copier après la connexion

4. Erreurs courantes avec Scope

A. Oublier let et const

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
Copier après la connexion
Copier après la connexion

B. Bloquer la portée avec var

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();
Copier après la connexion
Copier après la connexion

C. Observation

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
Copier après la connexion
Copier après la connexion

5. Différence entre la portée et la portée lexicale

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.
Portée
Portée lexicale

ête> Fait référence au contexte dans lequel les variables sont accessibles. Fait référence à la manière dont l'emplacement des variables dans le code détermine la portée. Peut être global, bloc ou fonction. Dépend de la structure du code au moment de son écriture. Dynamique pendant l'exécution. Corrigé lors de la définition du code.
    6. Meilleures pratiques
Utilisez let et const
function outer() {
  let outerVar = "I'm outer";

  function inner() {
    console.log(outerVar); // Accesses the outer scope
  }

  inner();
}
outer();
// Output: I'm outer
Copier après la connexion
Copier après la connexion
 : Utilisez toujours let et const pour éviter les variables globales inattendues.

  1. Réduire les variables globales
  2.  :
  3. Les variables globales peuvent conduire à des conflits de noms. Encapsulez le code dans des fonctions ou des modules.


    Comprendre la portée lexicale
  4.  :
Profitez des fermetures et de la portée lexicale pour écrire un code plus propre et plus efficace.

    Résumé
  • Scope définit où les variables sont accessibles, avec trois types : global, bloc et fonction.
  • Portée lexicale
  • garantit qu'une fonction utilise toujours la portée dans laquelle elle a été définie.

La maîtrise de ces concepts est essentielle pour déboguer et écrire du code JavaScript efficace.

Bonjour, je m'appelle Abhay Singh Kathayat !

Je suis un développeur full-stack avec une expertise dans les technologies front-end et back-end. Je travaille avec une variété de langages et de frameworks de programmation pour créer des applications efficaces, évolutives et conviviales. N'hésitez pas à me contacter à mon e-mail professionnel : kaashshorts28@gmail.com.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Musée de deux points: Guide de localisation de Bungle Wasteland
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds Tags

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Remplacer les caractères de chaîne en javascript Remplacer les caractères de chaîne en javascript Mar 11, 2025 am 12:07 AM

Remplacer les caractères de chaîne en javascript

jQuery Vérifiez si la date est valide jQuery Vérifiez si la date est valide Mar 01, 2025 am 08:51 AM

jQuery Vérifiez si la date est valide

jQuery obtient un rembourrage / marge d'élément jQuery obtient un rembourrage / marge d'élément Mar 01, 2025 am 08:53 AM

jQuery obtient un rembourrage / marge d'élément

Plugins JS de manipulation de 5 premiers Plugins JS de manipulation de 5 premiers Feb 28, 2025 am 12:34 AM

Plugins JS de manipulation de 5 premiers

10 vaut la peine de vérifier les plugins jQuery 10 vaut la peine de vérifier les plugins jQuery Mar 01, 2025 am 01:29 AM

10 vaut la peine de vérifier les plugins jQuery

10 onglets jQuery Accordion 10 onglets jQuery Accordion Mar 01, 2025 am 01:34 AM

10 onglets jQuery Accordion

jQuery Ajouter une barre de défilement à div jQuery Ajouter une barre de défilement à div Mar 01, 2025 am 01:30 AM

jQuery Ajouter une barre de défilement à div

Tutoriel de configuration de l'API de recherche Google personnalisé Tutoriel de configuration de l'API de recherche Google personnalisé Mar 04, 2025 am 01:06 AM

Tutoriel de configuration de l'API de recherche Google personnalisé

See all articles