Maison > Article > interface Web > Que signifie la fermeture javascript ?
En JavaScript, une fermeture fait référence à une fonction ; lorsque deux fonctions sont imbriquées l'une dans l'autre, la fonction interne est une fermeture. Un corps de fermeture typique est une fonction avec une structure imbriquée ; la fonction interne fait référence aux membres privés de la fonction externe, et en même temps la fonction interne est référencée par le monde extérieur. Lorsque la fonction externe est appelée, une fermeture est. formé.
L'environnement d'exploitation de ce tutoriel : système Windows 7, JavaScript version 1.8.5, ordinateur Dell G3.
Qu'est-ce que la fermeture
La soi-disant fermeture fait référence à une fonction. Lorsque deux fonctions sont imbriquées l’une dans l’autre, la fonction interne est une fermeture.
Principe de formation
Lorsque la fonction est appelée, un objet d'activité contextuel temporaire sera généré. Il s'agit de l'objet de niveau supérieur de la portée de la fonction. Toutes les méthodes privées, variables, paramètres, fonctions privées, etc. dans la portée existeront en tant qu'attributs de l'objet actif du contexte. Après l'appel de la fonction
, par défaut, l'objet actif du contexte sera immédiatement libéré pour éviter d'occuper les ressources système. Cependant, si les variables privées, les paramètres, les fonctions privées, etc. au sein de la fonction sont référencés par le monde extérieur, l'objet actif du contexte continuera d'exister temporairement jusqu'à ce que toutes les références externes soient annulées.
Cependant, la portée de la fonction est fermée et n'est pas accessible au monde extérieur. Alors, dans quelles circonstances le monde extérieur peut-il accéder aux membres privés d’une fonction ?
Selon la chaîne de portée, la fonction interne peut accéder aux membres privés de la fonction externe. Si la fonction interne fait référence aux membres privés de la fonction externe et que la fonction interne est transmise au monde extérieur ou est ouverte au monde extérieur, alors un corps de fermeture est formé. Cette fonction externe est un corps de fermeture.Après son appel, l'objet actif ne sera pas annulé temporairement et ses propriétés continueront d'exister. Les membres privés de la fonction externe peuvent être lus et écrits en continu via la fonction interne.
Structure de fermeture
Un corps de fermeture typique est fonction d'une structure imbriquée. La fonction interne fait référence aux membres privés de la fonction externe, et en même temps la fonction interne est référencée par le monde extérieur. Lorsque la fonction externe est appelée, une fermeture est formée. Cette fonction est également appelée fonction de fermeture.
Ce qui suit est une structure de fermeture typique.
function f(x) { //外部函数 return function (y) { //内部函数,通过返回内部函数,实现外部引用 return x + y; //访问外部函数的参数 }; } var c = f(5); //调用外部函数,获取引用内部函数 console.log(c(6)); //调用内部函数,原外部函数的参数继续存在
Le processus d'analyse est brièvement décrit comme suit :
Pendant la période de pré-compilation du script JavaScript, la fonction f déclarée et la variable c sont d'abord pré-analysées lexicalement.
Pendant l'exécution de JavaScript, appelez la fonction f et transmettez la valeur 5.
Lors de l'analyse de la fonction f, l'environnement d'exécution (portée de la fonction) et l'objet actif seront créés, et les paramètres, les variables privées et les fonctions internes seront mappés aux propriétés de l'objet actif.
La valeur du paramètre x est 5, qui correspond à l'attribut x de l'objet actif.
La fonction interne fait référence au paramètre x via la chaîne de portée, mais n'a pas encore été exécutée.
Une fois la fonction externe appelée, la fonction interne revient, provoquant le référencement de la fonction interne par la variable externe c.
L'analyseur JavaScript détecte que les propriétés de l'objet actif de la fonction externe sont référencées par le monde extérieur et ne peut pas désenregistrer l'objet actif, il continue donc à maintenir l'existence de l'objet dans la mémoire.
Lorsque c est appelé, c'est-à-dire lorsque la fonction interne est appelée, vous pouvez voir que la valeur stockée dans le paramètre x de la fonction externe continue d'exister. De cette manière, les opérations ultérieures peuvent être implémentées et x+y=5=6=11 est renvoyé.
L'intérêt de la fermeture est de faciliter le stockage des données pendant l'opération d'expression. Cependant, ses défauts ne peuvent être ignorés :
Une fois la fonction appelée, l'objet appelant ne peut pas être déconnecté, ce qui occupera des ressources système. Une utilisation intensive des fermetures dans les scripts peut facilement entraîner des fuites de mémoire. Solution : utilisez les fermetures avec prudence et n’en abusez pas.
En raison de la fonction des fermetures, les valeurs qu'elles enregistrent sont dynamiques et des exceptions ou des erreurs peuvent facilement se produire si elles ne sont pas gérées correctement.
【Recommandations associées : Tutoriel d'apprentissage Javascript】
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!