Maison  >  Article  >  interface Web  >  Maîtrisez l'essence des fermetures : compréhensions clés pour rendre votre code plus élégant

Maîtrisez l'essence des fermetures : compréhensions clés pour rendre votre code plus élégant

WBOY
WBOYoriginal
2024-01-13 14:54:18371parcourir

Maîtrisez lessence des fermetures : compréhensions clés pour rendre votre code plus élégant

Le secret des fermetures révélé : Maîtrisez ces connaissances clés pour rendre votre code plus élégant

Introduction :
La fermeture est un concept de programmation puissant qui est largement utilisé dans de nombreux langages de programmation. Non seulement JavaScript, mais également les langages de programmation tels que Python et Ruby prennent en charge les fermetures. Le concept de fermeture est également souvent utilisé dans certains outils et frameworks de programmation. Cet article présentera en détail le concept et l'utilisation des fermetures et utilisera des exemples de code spécifiques pour aider les lecteurs à mieux comprendre les mystères des fermetures.

Qu'est-ce que la fermeture ?
Avant de comprendre les fermetures, nous devons comprendre quelques concepts de base. En JavaScript, les fonctions sont des citoyens de première classe et peuvent être transmises comme arguments à d'autres fonctions et renvoyées comme valeurs de retour. Une fermeture est l'expression d'une référence à une fonction et à son environnement de référence associé. Les fermetures peuvent être implémentées en définissant une fonction à l'intérieur d'une fonction et en renvoyant cette fonction.

Concepts clés des fermetures :

  1. Fonctions internes : Les fonctions définies dans les fonctions externes sont appelées fonctions internes. Les fonctions internes peuvent accéder aux variables locales, aux paramètres et aux variables globales des fonctions externes.

Voici un exemple de fermeture simple montrant la fonction interne accédant aux variables locales de la fonction externe :

function outerFunction() {
  var outerVariable = "Hello, ";
  
  function innerFunction(name) {
    console.log(outerVariable + name);
  }
  
  return innerFunction;
}

var greet = outerFunction();
greet("John");  // 输出:Hello, John

Dans le code ci-dessus, la fonction externalFunction renvoie la fonction innerFunction et l'assigne à la variable greet. Ensuite, nous pouvons appeler la fonction innerFunction via la variable greet et transmettre un paramètre name. À l’intérieur de innerFunction, nous pouvons voir qu’il utilise la variable locale externalVariable de la fonction externe externalFunction. Ceci est un exemple de fermeture.

  1. Environnement de référence : L'environnement de référence fait référence aux variables et paramètres des fonctions externes auxquels les fonctions internes peuvent accéder. Lorsqu'une fonction interne est créée, elle enregistre l'environnement de référence dans ses propres propriétés internes pour l'utiliser lorsque la fonction est appelée.

La fermeture peut prolonger le cycle de vie des variables, de sorte qu'après l'appel de la fonction externe, ses variables internes soient toujours accessibles et utilisées. Voici un exemple de fermeture prolongeant la durée de vie d'une variable :

function counter() {
  var count = 0;
  
  function increment() {
    count++;
    console.log(count);
  }
  
  return increment;
}

var counter1 = counter();
counter1();  // 输出:1
counter1();  // 输出:2

var counter2 = counter();
counter2();  // 输出:1

Dans le code ci-dessus, la fonction compteur renvoie un incrément de fonction interne et l'affecte aux variables compteur1 et compteur2. Chaque fois que counter1() et counter2() sont appelés, ils peuvent accéder et mettre à jour la variable count dans l'environnement de référence. C'est ainsi que les fermetures peuvent prolonger la durée de vie des variables.

Scénarios d'application des fermetures :
Les fermetures ont un large éventail de scénarios d'application en développement réel. Voici plusieurs scénarios d'application courants :

  1. Encapsulation de variables privées : les fermetures peuvent simuler des variables privées d'une classe. Grâce à la fonction interne définie dans la fonction externe, les variables locales de la fonction externe sont accessibles, réalisant ainsi l'encapsulation des variables privées. De cette manière, la variable n'est accessible qu'en externe via les méthodes publiques exposées, mais ne peut pas être modifiée directement.
function createPerson(name) {
  var privateName = name;
  
  return {
    getName: function() {
      return privateName;
    },
    setName: function(newName) {
      privateName = newName;
    }
  };
}

var person = createPerson("John");
console.log(person.getName());  // 输出:John
person.setName("Mike");
console.log(person.getName());  // 输出:Mike

Dans le code ci-dessus, la fonction createPerson renvoie un objet contenant deux méthodes grâce auxquelles la variable privée privateName peut être obtenue et modifiée. Cela peut avoir pour effet d'encapsuler des variables privées.

  1. Exécution retardée : les fermetures peuvent être utilisées pour obtenir des effets d'exécution retardée, tels que des fonctions de rappel dans du code asynchrone.
function delayRequest(url, callback) {
  setTimeout(function() {
    // 模拟网络请求
    var data = "Response from " + url;
    callback(data);
  }, 1000);
}

function logResponse(response) {
  console.log(response);
}

delayRequest("https://example.com", logResponse);  // 一秒后输出:Response from https://example.com

Dans le code ci-dessus, la fonction delayRequest simule une requête réseau et appelle la fonction de rappel une seconde plus tard. Grâce aux fermetures, nous pouvons transmettre la valeur de la réponse à la fonction de rappel.

Conclusion : 
Les fermetures sont un concept de programmation puissant. Maîtriser les principes et l'utilisation des fermetures peut nous permettre d'écrire du code plus élégant et plus flexible. Grâce à l’introduction et aux exemples de cet article, je pense que les lecteurs ont une compréhension plus approfondie des fermetures. Dans le développement actuel, l'application flexible des fermetures nous permet de résoudre divers problèmes plus efficacement. Par conséquent, vous pourriez aussi bien pratiquer davantage et améliorer votre compréhension et votre capacité d’application des fermetures.

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