Maison > interface Web > js tutoriel > Résumé des connaissances de base de JavaScript (10) Fermetures et fonctions d'exécution immédiate

Résumé des connaissances de base de JavaScript (10) Fermetures et fonctions d'exécution immédiate

php中世界最好的语言
Libérer: 2018-03-10 13:39:19
original
1312 Les gens l'ont consulté

Cette fois, je vais vous apporter un résumé des connaissances de base de JavaScript. Il y a onze points de connaissances au total. (10) Fermetures et fonctions d'exécution immédiate. un coup d'oeil.

//例子function a() {    function b(){        var bbb = 234;        console.log(aaa)
    }    var aaa = 123;    return b;
}var glob = 100;var demo = a();
demo();
Copier après la connexion

Tout d'abord, après que cette fonction ait exécuté return b, la fonction a a fini de s'exécuter et l'AO de a sera détruite. Cependant, la fonction b a été enregistrée avant la destruction, donc le contexte d'exécution de. b n’existe pas être détruit.

Donc les AO et Go de b sont sauvegardés

Cela forme une fermeture, qui peut aussi se dire ainsi : La fonction interne est sauvegardée à l'extérieur, ce qui doit former Fermeture

function a (){    var num  = 100;    function b(){
        num ++;        console.log(num);
    }    return b;
}var demo = a();
demo();//打印101demo();//打印102
Copier après la connexion

Le concept de fermeture : Lorsque la fonction interne est enregistrée à l'extérieur, une fermeture sera générée. La fermeture empêchera la chaîne de lunette d'origine de se libérer, provoquant des fuites de mémoire (occupation de la mémoire)

Fuites de mémoire : Par exemple... une tasse... plus vous y mettez d'eau, plus moins mémoire dont vous disposez (pour la même raison, plus vous occupez de mémoire, moins elle en a)

Le rôle de la fermeture

Implémentation de variables publiques

Accumulateur de fonctions

Peut faire de la mise en cache (structure de stockage)

eater

Peut réaliser l'encapsulation et la privatisation des attributs

Person()

module développement pour éviter la pollution des variables globales

1. L'exemple ci-dessus de l'accumulateur a été écrit

2. La mise en cache (structure de stockage) peut être effectuée

function test(){    var num = 100;    function a(){
        num ++;        console.log(num);
    };    function b(){
        num --;        console.log(num);
    };    return [a,b]
}var myArr = test();
myArr[0]();//打印101myArr[1]();//打印100
function eater(){    var food = "";    var obj ={        eat : function(){            console.log("i am eating" + food)
        },        push : function (myFood){
            food = myFood;
        }
    }    return obj;
}var eater1 = eater();
eater1.push('banana');
eater1.eat();//打印出 i am eating banana
Copier après la connexion
<🎜. >ci-dessus Dans cet exemple, après eater1.push('banana'), j'ai donné le foot = "" dans le mangeur et je l'ai changé en food = "banana". Après avoir exécuté eater1.eat(), j'ai obtenu food = "banana". Ils fonctionnent tous sur la même fermeture, donc je mange de la banane est imprimé. Ce pied est équivalent à une structure de stockage implicite. Pareil, c'est une application de mise en cache.

Achetez-vous une fosse, privatisez les attributs, je vous expliquerai après avoir fini d'écrire l'

objet, il en va de même pour le développement modulaire

immédiatement Fonction d'exécution

Ce type de fonction n'est pas déclaré et est libéré après une exécution. Convient pour les travaux d'initialisation.

function a(){
    
}function b(){
    
}
Copier après la connexion
Je définis deux fonctions. À moins que ces deux fonctions n'attendent que mon JavaScript soit exécuté, ces deux fonctions ne seront jamais publiées et attendront toujours d'être exécutées. L'attente d'être exécutée prend de la place.

Fonction : Fonction pour la fonction d'initialisation

(function (aaa,bbb,ccc){    var a = 234;    var b = 123;    var c = a+b;    console.log(c)    return c}(1,2,3))
执行完立即被销毁
// 怎么去接收他var num = (function (aaa,bbb,ccc){    var a = 234;    var b = 123;    var c = a+b;    console.log(c)    return c}(1,2,3))
立即执行函数有两种写法
//第一种(function(){}());//w3c 建议第一种//第二种(function(){})();
扩展
只有表达式才可以被执行符号执行
var test = function (){}()//也可以被执行+ function test(){}()//也可以被执行 以此类推- !号也可以function test(){    console.log(a+b+c+d)}(1,2,3,4)//不执行也不报错
Copier après la connexion
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le. Site Web chinois PHP !

Lecture connexe :

Résumé des connaissances de base de JavaScript (9) Définition de la portée et de la chaîne de portée

Résumé des bases de JavaScript connaissances (8) Processus d'exécution de pré-compilation

Résumé des connaissances de base de JavaScript (7) Récursion

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!

É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