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();
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
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
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(){ }
(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)//不执行也不报错
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!