Analyse des fermetures JavaScript (avec code)
Le contenu de cet article concerne l'analyse des fermetures JavaScript (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Une fermeture est une fonction qui a accès à une variable dans le cadre d'une autre fonction. Une manière courante de créer une fermeture consiste à créer une fonction à l’intérieur d’une autre fonction. Avant de comprendre les fermetures, vous devez d'abord comprendre la portée des variables
Portée des variables : les variables globales et les variables locales
1 Les variables globales
sont directement définies dans le global. scope Les variables
var name='Fakin'; function getName(){ alert(name) } getName()//'Fakin'
et les fonctions peuvent lire directement les variables globales
2. Les variables locales
sont des variables directement définies à l'intérieur de la fonction (JS n'avait pas de portée au niveau du bloc avant ES6)
function getName(){ var name='Fakin'; } alert(name)//undefined
Fermeture
Après avoir compris ces deux choses, jetons un œil à ce qu'est la fermeture !
Question 1 : Qu'est-ce qu'une fermeture ? Il y a beaucoup de choses mentionnées ci-dessus, mais je n'arrive pas à comprendre ?
Réponse : Ma compréhension personnelle de la fermeture est une fonction qui peut lire les variables internes d'autres fonctions
Question 2 : Comment utiliser les fermetures
Réponse : Créer une fonction à l'intérieur d'une fonction, et dans celle-ci function Référencez les variables de la fonction précédente, et enfin renvoyez simplement la fonction. N'est-ce pas très compliqué ? Voici un exemple
function f1(){ var n=999; nAdd=function(){n+=1} function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999 nAdd(); result(); // 1000
Dans l'exemple ci-dessus, f2 est la fonction de fermeture, et la fonction f2. est renvoyé dans f1. Enfin, attribuez f1 au résultat, et le résultat a été exécuté deux fois, et le résultat était ce que nous voulions, ce qui a prouvé que lors de la fermeture, f2 faisait référence à la variable 'n' de f1, mais 'n' n'a pas terminé l'exécution. parce que f1 Ensuite, il est détruit en mémoire. Tout le monde doit savoir qu'en JS, si une variable n'est pas référencée à d'autres endroits après l'exécution de la fonction, elle est automatiquement détruite.
Choses à noter lors de l'utilisation des fermetures
1 : Étant donné que les fermetures entraîneront le stockage des variables de la fonction en mémoire, l'utilisation de la mémoire sera importante, ce qui Cause Le rendu se bloque, etc., le navigateur s'exécute lentement, et cela peut également provoquer des fuites de mémoire et d'autres problèmes dans les navigateurs IE
2 : Puisque la fonction enfant fait référence aux variables de la fonction parent dans la fermeture, la fonction enfant modifiera les variables de la fonction parent, veuillez ne pas modifier la valeur de la variable de la fonction parent à volonté
Questions de réflexion
function count() { var arr = []; for (var i=1; i<=3; i++) { arr.push(function () { return i * i; }); } return arr; } var results = count(); var f1 = results[0]; var f2 = results[1]; var f3 = results[2]; f1(); // 16 f2(); // 16 f3(); // 16
Pourquoi f1 f2 f3 renvoie-t-il tous la même chose la valeur, pas ce que nous voulons ? Alors, comment ne pas résoudre ce problème par la clôture ?
C'est en fait très simple, nous avons juste besoin de deux lignes de code supplémentaires pour la fermeture
function count() { var arr = []; for (var i=1; i<=3; i++) { arr.push((function (n) { return function () { return n * n; } })(i)); //在自执行函数中把i传入相当于这个自执行函数的参数绑定了i, //当每次循环的时候不管变量怎么更改,这个函数的参数不会更改,所以返回咱们想要的结果 } return arr; } var results = count(); var f1 = results[0]; var f2 = results[1]; var f3 = results[2]; f1(); // 1 f2(); // 4 f3(); // 9
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de reconnaissance vocale en ligne Introduction : Avec le développement continu de la technologie, la technologie de reconnaissance vocale est devenue une partie importante du domaine de l'intelligence artificielle. Le système de reconnaissance vocale en ligne basé sur WebSocket et JavaScript présente les caractéristiques d'une faible latence, d'un temps réel et d'une multiplateforme, et est devenu une solution largement utilisée. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de reconnaissance vocale en ligne.

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en œuvre en détail. 1. Technologie WebSocket

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de réservation en ligne. À l'ère numérique d'aujourd'hui, de plus en plus d'entreprises et de services doivent fournir des fonctions de réservation en ligne. Il est crucial de mettre en place un système de réservation en ligne efficace et en temps réel. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de réservation en ligne et fournit des exemples de code spécifiques. 1. Qu'est-ce que WebSocket ? WebSocket est une méthode full-duplex sur une seule connexion TCP.

Introduction à l'utilisation de JavaScript et de WebSocket pour mettre en œuvre un système de commande en ligne en temps réel : avec la popularité d'Internet et les progrès de la technologie, de plus en plus de restaurants ont commencé à proposer des services de commande en ligne. Afin de mettre en œuvre un système de commande en ligne en temps réel, nous pouvons utiliser les technologies JavaScript et WebSocket. WebSocket est un protocole de communication full-duplex basé sur le protocole TCP, qui peut réaliser une communication bidirectionnelle en temps réel entre le client et le serveur. Dans le système de commande en ligne en temps réel, lorsque l'utilisateur sélectionne des plats et passe une commande

JavaScript et WebSocket : Construire un système efficace de prévisions météorologiques en temps réel Introduction : Aujourd'hui, la précision des prévisions météorologiques revêt une grande importance pour la vie quotidienne et la prise de décision. À mesure que la technologie évolue, nous pouvons fournir des prévisions météorologiques plus précises et plus fiables en obtenant des données météorologiques en temps réel. Dans cet article, nous apprendrons comment utiliser la technologie JavaScript et WebSocket pour créer un système efficace de prévisions météorologiques en temps réel. Cet article démontrera le processus de mise en œuvre à travers des exemples de code spécifiques. Nous

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

Utilisation : En JavaScript, la méthode insertBefore() est utilisée pour insérer un nouveau nœud dans l'arborescence DOM. Cette méthode nécessite deux paramètres : le nouveau nœud à insérer et le nœud de référence (c'est-à-dire le nœud où le nouveau nœud sera inséré).

Introduction à la méthode d'obtention du code d'état HTTP en JavaScript : Dans le développement front-end, nous devons souvent gérer l'interaction avec l'interface back-end, et le code d'état HTTP en est une partie très importante. Comprendre et obtenir les codes d'état HTTP nous aide à mieux gérer les données renvoyées par l'interface. Cet article explique comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournit des exemples de code spécifiques. 1. Qu'est-ce que le code d'état HTTP ? Le code d'état HTTP signifie que lorsque le navigateur lance une requête au serveur, le service
