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

May 16, 2016 pm 04:31 PM
js 实例 闭包

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.

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Recommandé : Excellent projet de détection et de reconnaissance des visages open source JS Recommandé : Excellent projet de détection et de reconnaissance des visages open source JS Apr 03, 2024 am 11:55 AM

La technologie de détection et de reconnaissance des visages est déjà une technologie relativement mature et largement utilisée. Actuellement, le langage d'application Internet le plus utilisé est JS. La mise en œuvre de la détection et de la reconnaissance faciale sur le front-end Web présente des avantages et des inconvénients par rapport à la reconnaissance faciale back-end. Les avantages incluent la réduction de l'interaction réseau et de la reconnaissance en temps réel, ce qui réduit considérablement le temps d'attente des utilisateurs et améliore l'expérience utilisateur. Les inconvénients sont les suivants : il est limité par la taille du modèle et la précision est également limitée ; Comment utiliser js pour implémenter la détection de visage sur le web ? Afin de mettre en œuvre la reconnaissance faciale sur le Web, vous devez être familier avec les langages et technologies de programmation associés, tels que JavaScript, HTML, CSS, WebRTC, etc. Dans le même temps, vous devez également maîtriser les technologies pertinentes de vision par ordinateur et d’intelligence artificielle. Il convient de noter qu'en raison de la conception du côté Web

Quelle est la signification de la fermeture dans l'expression lambda C++ ? Quelle est la signification de la fermeture dans l'expression lambda C++ ? Apr 17, 2024 pm 06:15 PM

En C++, une fermeture est une expression lambda qui peut accéder à des variables externes. Pour créer une fermeture, capturez la variable externe dans l'expression lambda. Les fermetures offrent des avantages tels que la réutilisabilité, la dissimulation des informations et une évaluation paresseuse. Ils sont utiles dans des situations réelles telles que les gestionnaires d'événements, où la fermeture peut toujours accéder aux variables externes même si elles sont détruites.

Comment implémenter la fermeture dans une expression C++ Lambda ? Comment implémenter la fermeture dans une expression C++ Lambda ? Jun 01, 2024 pm 05:50 PM

Les expressions C++ Lambda prennent en charge les fermetures, qui enregistrent les variables de portée de fonction et les rendent accessibles aux fonctions. La syntaxe est [capture-list](parameters)->return-type{function-body}. capture-list définit les variables à capturer. Vous pouvez utiliser [=] pour capturer toutes les variables locales par valeur, [&] pour capturer toutes les variables locales par référence, ou [variable1, variable2,...] pour capturer des variables spécifiques. Les expressions Lambda ne peuvent accéder qu'aux variables capturées mais ne peuvent pas modifier la valeur d'origine.

Quels sont les avantages et les inconvénients des fermetures dans les fonctions C++ ? Quels sont les avantages et les inconvénients des fermetures dans les fonctions C++ ? Apr 25, 2024 pm 01:33 PM

Une fermeture est une fonction imbriquée qui peut accéder aux variables dans la portée de la fonction externe. Ses avantages incluent l'encapsulation des données, la conservation de l'état et la flexibilité. Les inconvénients incluent la consommation de mémoire, l’impact sur les performances et la complexité du débogage. De plus, les fermetures peuvent créer des fonctions anonymes et les transmettre à d'autres fonctions sous forme de rappels ou d'arguments.

La relation entre js et vue La relation entre js et vue Mar 11, 2024 pm 05:21 PM

La relation entre js et vue : 1. JS comme pierre angulaire du développement Web ; 2. L'essor de Vue.js en tant que framework front-end ; 3. La relation complémentaire entre JS et Vue ; Vue.

L'impact des pointeurs de fonction et des fermetures sur les performances de Golang L'impact des pointeurs de fonction et des fermetures sur les performances de Golang Apr 15, 2024 am 10:36 AM

L'impact des pointeurs de fonction et des fermetures sur les performances de Go est le suivant : Pointeurs de fonction : légèrement plus lents que les appels directs, mais améliorent la lisibilité et la réutilisabilité. Fermetures : généralement plus lentes, mais encapsulent les données et le comportement. Cas pratique : les pointeurs de fonction peuvent optimiser les algorithmes de tri et les fermetures peuvent créer des gestionnaires d'événements, mais ils entraîneront des pertes de performances.

Appels enchaînés et fermetures de fonctions PHP Appels enchaînés et fermetures de fonctions PHP Apr 13, 2024 am 11:18 AM

Oui, la simplicité et la lisibilité du code peuvent être optimisées grâce à des appels et des fermetures enchaînés : les appels en chaîne lient les appels de fonction dans une interface fluide. Les fermetures créent des blocs de code réutilisables et accèdent à des variables en dehors des fonctions.

Comment les fermetures sont-elles implémentées en Java ? Comment les fermetures sont-elles implémentées en Java ? May 03, 2024 pm 12:48 PM

Les fermetures en Java permettent aux fonctions internes d'accéder aux variables de portée externe même si la fonction externe est terminée. Implémentée via des classes internes anonymes, la classe interne contient une référence à la classe externe et maintient les variables externes actives. Les fermetures augmentent la flexibilité du code, mais vous devez être conscient du risque de fuite de mémoire, car les références à des variables externes par des classes internes anonymes maintiennent ces variables en vie.

See all articles