Maison  >  Article  >  interface Web  >  En une phrase : Qu’est-ce que la clôture ?

En une phrase : Qu’est-ce que la clôture ?

零下一度
零下一度original
2017-06-26 15:47:402373parcourir

En une phrase : une fermeture est une fonction qui capture les liaisons externes dans la portée.

Définition officielle : Une expression (généralement une fonction) qui a de nombreuses variables et un environnement lié à ces variables, car ces variables sont également appelées partie de l'expression.

La relation entre les variables libres et les fermetures : Les variables libres sont fermées à la création de fermetures.

La logique interne est

Variables libres : S'il y a d'autres fonctions à l'intérieur d'une fonction, alors ces fonctions internes peuvent accéder aux variables déclarées dans la fonction externe (ces variables sont appelées variables libres).

Trois caractéristiques des fermetures :

1. Les fonctions imbriquées dans les fonctions

2. Paramètres et variables

3. Les paramètres et variables ne seront pas recyclés par le mécanisme de garbage collection

L'inconvénient de la fermeture est qu'elle est résidente en mémoire et augmentera l'utilisation de la mémoire, une mauvaise utilisation peut facilement provoquer des fuites de mémoire.

Avantages des fermetures :

1 J'espère qu'une variable. peut Résider à long terme en mémoire

2.Éviter la pollution des variables globales

3 Existence de membres privés

function fn(){//闭包 fn()
  var a = 10;
  function f1(){
  a++;
  console.log(a);
  }
  return f1;
  }
  var f = fn();
  f();
  f();
  f(); 
.

La fermeture résout le problème de la valeur de l'index :

 
 
 
  charset="UTF-8">
  <span class="html-tag">
 
 
 
 
  • 1
  •  
  • 2
  •  
  • 3
  •  
  • 4
  •  
     
     
     
     

    Problème de fuite de mémoire :

    Les objets JS et DOM d'IE utilisent des mécanismes de récupération de place différents, donc les fermetures dans IE provoqueront des fuites de mémoire, c'est-à-dire que les éléments résidant en mémoire ne pourront pas être détruits.

    fonction fermeture()
    var oDiv = document.getElementById("div1");//oDiv Il reste en mémoire après utilisation
    oDiv.onclic = function()
    alert("oDiv.innerHTML");//L'utilisation d'oDiv ici entraînera des fuites de mémoire
    };
    function closure(){
      var oDiv = document.getElementById("div1");//oDiv用完之后一直驻留在内存
       
      oDiv.onclic = function(){
      alert("oDiv.innerHTML");//这里用oDiv会导致内存泄露
      };
       
     

    closure();

     

    //将oDiv解除引用来避免内存泄露 function closure(){ var oDiv = document.getElementById("div1");//oDiv用完之后一直驻留在内存 var test = oDiv.innerHTM oDiv.onclic = function(){ alert(test);//这里用oDiv会导致内存泄露 }; oDiv = null; } 
    } closure(); //Déréférencer oDiv pour éviter les fuites de mémoire function Closure(){ var oDiv = document.getElementById("div1");//Utiliser oDiv Il restera dans mémoire après l'achèvement var test = oDiv.innerHTM oDiv.onclic = function(){ alert(test);//L'utilisation d'oDiv ici provoquera des fuites de mémoire };

    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