Fermeture Js
Les choses à savoir avant la fermeture
1. Portée de la fonction
(1) La particularité du langage Js est que les variables globales peuvent être lues directement à l'intérieur de la fonction
Si en php
(2). Les variables locales au sein de la fonction ne peuvent pas être lues en dehors de la fonction
Notez que var doit être ajouté lors de la déclaration de variables à l'intérieur d'une fonction, sinon une variable globale sera déclarée
//Bien sûr, c'est encore plus vrai en php,
Parfois, si vous avez besoin d'obtenir les variables locales à l'intérieur de la fonction, vous devez utiliser une méthode flexible pour tirer parti des caractéristiques de la portée des variables js, comme définir une sous-fonction à l'intérieur de la fonction. fonction, la fonction parent est sa fonction globale et la sous-fonction est Les fonctions peuvent accéder aux variables de la fonction parent (qui sont des variables locales pour l'ensemble du code js)
Toutes les variables locales à l'intérieur de Parent sont visibles par ses fonctions enfants, mais les variables locales dans ses fonctions enfants ne sont pas visibles par sa fonction parent. Il s'agit de la structure de portée de chaîne unique des objets enfants js qui recherchera toutes les variables du parent. objet vers le haut d'un niveau à la fois. Toutes les variables de l'objet parent sont visibles par les objets enfants, et l'inverse n'est pas vrai ! La fonction fils ci-dessus est une fermeture
Certains étudiants peuvent être comme ça
Notez qu'en JavaScript, les fonctions déclarées dans les fonctions sont locales et sont publiées une fois l'exécution de la fonction terminée
Faites attention à la différence entre ceci et php
Fermeture
Définir la fonction à l'intérieur de la fonction, le pont reliant l'intérieur et l'extérieur de la fonction
La fermeture a deux fonctions :
L'une est la lecture mentionnée précédemment des variables à l'intérieur de la fonction,
La seconde consiste à stocker les valeurs de ces variables en mémoire pour réaliser le partage de données
Voici quelques exemples de fermetures
Le résultat de l'exécution de la fonction anonyme (c'est-à-dire que la déclaration de la sous-fonction interne est affectée à la variable globale cut), i est enregistré en mémoire
Lors de l'exécution de cut(), la valeur est obtenue directement de la mémoire. i ne peut être appelé que par la fonction cnt(), et direct alert(i) ne fonctionnera pas
Vous pouvez également passer des paramètres dans la fermeture
Afin d'avoir une meilleure compréhension des fermetures, regardons le code suivant
Par exemple, je veux renvoyer un tableau. Il y a 5 fonctions dans le tableau. La première fonction affiche 0, la seconde affiche 1...
Si le code est écrit comme ça
function(){return i;} }
Le dernier i vaut 4, puis il devient 5
Pour les arrêts de boucle
J'ai trouvé que 5 pop up dans tous les cas, ce qui évidemment ne répond pas à nos exigences
Solution 1
Exécution automatique des fonctions à l'intérieur
Solution 2
Mise en œuvre de la fermeture
Fonction de retour(){numéro de retour;}
})(i);
retour arr;
>
pour(var i=0;i<5;i ){
alerte(arr());//0,1,2,3,4
>
Quand je=0
arr[0]=(function(num){return function(){return num;}})(0);
13 heures
arr[1]=(function(num){return function(){return num;}})(1
);
Ce qui précède sont les avantages de la fermeture ! C'est très simple et pratique.