Maison > interface Web > js tutoriel > Résumé des exemples de fermeture js_connaissances de base

Résumé des exemples de fermeture js_connaissances de base

WBOY
Libérer: 2016-05-16 16:31:46
original
1620 Les gens l'ont consulté

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

Copier le code Le code est le suivant :


Si en php

Copier le code Le code est le suivant :

$n=100;
fonction parent(){
écho $n;
>
parent(); // signalera une erreur n n'est pas défini
?>

(2). Les variables locales au sein de la fonction ne peuvent pas être lues en dehors de la fonction

Copier le code Le code est le suivant :


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

Copier le code Le code est le suivant :

fonction parent(){
m=50;
>
parent();
alerte(m);//50

//Bien sûr, c'est encore plus vrai en php,

Copier le code Le code est le suivant :

fonction parent(){
global $m;//global, la définition et l'affectation doivent être séparées
M$=50 ;
>
parent();
écho $m;//50
?>
//S'il n'y a pas de global, une erreur non définie sera quand même signalée

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)

Copier le code Le code est le suivant :


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

Copier le code Le code est le suivant :

fonction parent(){
varm=50;
fonction fils(){
alerte(m);
>
>
parent();
fils()//La fonction de rapport fils n'est pas définie

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

Copier le code Le code est le suivant :

fonction parent(){
fonction fils(){
M$=50 ;
écho $m;
>
>
parent();
son();//Sortie 50 et aucune erreur ne sera signalée
?>

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

Copier le code Le code est le suivant :


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

Copier le code Le code est le suivant :

var cnt=(fonction(num){
fonction de retour(){
alerte(num);
num ;
>
})(5);
cnt();//5
cnt();//6
cnt();//7
//Bien sûr, vous pouvez également transmettre des paramètres lors de l'appel
var cnt=(fonction(){
var je=0;
fonction de retour (num) {
num =i;
alerte(num);
je ;
>
})();
cnt(1);//1
cnt(2);//3
cnt(3);//5

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

Copier le code Le code est le suivant :

boîte de fonction(){
var arr=[];
pour(i=0;i<5;i ){
arr=fonction(){return i;}
>
retour arr; >
var a=box();
alert(a);//Tableau contenant cinq corps de fonctions
alerte(a[0]());
alerte(a[1]());

Corps de la fonction pop-up

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

Copier le code Le code est le suivant :
boîte de fonction(){
var arr=[];
pour(i=0;i<5;i ){
arr=(function(num){return i;})(i);
>
retour arr
>
var a=box();
pour(var i=0;i alerte(a);
>

Mais nous avons constaté que les éléments du tableau renvoyé sont les résultats de l'exécution de la fonction, mais ce que nous voulons, c'est que la fonction doive mettre à jour notre code


Solution 2 Mise en œuvre de la fermeture

Copier le code Le code est le suivant :
boîte de fonction(){
var arr=[];
          pour(var i=0;i<5;i){
arr=(fonction(num){

Fonction de retour(){numéro de retour;}
                  })(i);

}

retour arr; 
>

var arr=box();

pour(var i=0;i<5;i ){

alerte(arr());//0,1,2,3,4

>

Code clé

Copier le code Le code est le suivant :

arr=(fonction(num){
           return function(){return num;}
})(i);


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.

É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