Maison > interface Web > js tutoriel > Quelle est la signification de la fermeture en JavaScript et comment l'utiliser

Quelle est la signification de la fermeture en JavaScript et comment l'utiliser

清浅
Libérer: 2018-11-21 14:16:10
original
2568 Les gens l'ont consulté



Cet article partagera quelques connaissances sur les fermetures en JavaScript. Il a une certaine valeur de référence, j'espère qu'il sera utile. à tout le monde. Aidé

Une fermeture est une combinaison d'une fonction et de l'environnement lexical dans lequel la fonction est déclarée. Lorsqu'une fonction interne est enregistrée à l'extérieur, une fermeture sera générée et la fermeture. entraînera la perte de la chaîne de portée d'origine, provoquant des fuites de mémoire, mais les fermetures sont également très utiles car elles peuvent associer certaines données à des opérations sur ces données.

Exemple :

function demo() {
  var name = '张三'; // name 是demo()创建的局部变量
  function demo1() { //demo1()是demo()中的内部函数(闭包)
    console.log(name); // 使用父函数中声明的变量  
    }
  demo1();  
    }demo();
Copier après la connexion

Résultat d'exécution

Image 1.jpg

Créez une variable locale nommée name et un nom dans la fonction demo() Il est une fonction interne de demo1(). La fonction demo1() ne peut être utilisée que dans le corps de la fonction demo(). demo1 n'a pas de variables locales propres. Mais comme la fonction interne peut accéder aux variables de la fonction externe, demo1() peut accéder au nom de variable déclaré dans la fonction parent demo(). Mais si une variable portant le même nom name est définie dans demo1, le nom défini dans sa propre fonction sera utilisé. Cet exemple montre qu'une fonction imbriquée peut accéder aux variables déclarées dans sa portée externe.

Que se passera-t-il si le code ci-dessus est remplacé par celui-ci ?

function demo() {
  var name = '张三';
  function demo1() {
    console.log(name);
  }
  return demo1;
  }
  var newDemo = demo();
  newDemo();
Copier après la connexion

Résultats d'exécution

Image 1.jpg

Il ressort des résultats d'exécution que les résultats des deux morceaux de code sont les mêmes. demo1() est renvoyé par la fonction externe avant l'exécution pour former un package de fermeture, dans ce cas, newDemo() est une référence à la fonction demo1 créée lors de l'exécution de la démo, donc lorsque newDemo() est appelé, le nom de la variable name. peut toujours être transmis à console.log(name).

Exemple

function num(x) {
  return function(y) {
    return x + y;
  };}
  var num1= num(2);
  var num2 = num(3);
  console.log(num1(2));// 4
  console.log(num2(2));// 5
Copier après la connexion

Exécution des résultats

Image 2.jpg

Définir une fonction num(x) en utilisant Elle reçoit un paramètre x et renvoie une nouvelle fonction. Cette nouvelle fonction reçoit également un paramètre y et renvoie la somme de x et y. En même temps, deux nouvelles valeurs num1 et num2 sont définies, toutes deux fermées et. les valeurs transmises sont respectivement 2.

Résumé : ce qui précède est le contenu partagé dans cet article. J'espère qu'il sera utile à tout le monde.



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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal