Maison > Article > interface Web > Analyse de fermeture JavaScript
Quand je suis entré en contact pour la première fois avec les fermetures en js, j'étais confus. Plus tard, j'ai revu les fermetures par hasard et j'ai décidé de comprendre cette chose. J'ai aussi trouvé beaucoup d'explications sur Internet. Une ressource relativement bonne, ici je veux utiliser les fermetures que j'ai apprises pour résumer
Fermeture : Construire une fonction dans la fonction, puis Cette fonction a le. possibilité d'accéder aux paramètres et variables des fonctions externes (sauf ceci et les arguments), ce qui signifie que toutes les fonctions sont des fermetures Le cycle de vie des fonctions internes est plus long que celui des fonctions externes. <.>
Voici un peu la portée de js : JavaScript n'a pas de portée au niveau du bloc, seulement une portée de fonction.
function a() { var temp = 0; }
Cette temp est comme une variable privée de la fonction a, inaccessible de l'extérieur, donc une façon d'obtenir la valeur de temp est de renvoyer temp ; cela obtient en effet la valeur de temp, mais il n'y a aucun moyen de protéger temp, donc temp sera initialisé à chaque fois que vous appellerez a(), et le résultat de l'exécution précédente de cette fonction a déjà été publié par GC
Regardez un morceau de code de fermeture :
function person() { var age = 10; function get_age() { return age+=1; } return get_age; } var temp = person();这是一个简单的闭包,在person函数里面构造了一个 get_age的函数,get_age这个函数可以访问person的所有参数和变量(除了this和arguments),并且最后把get_age作为了一个返回值返回.然后temp 的值为person调用的结果 所以temp的值就是get_age(),也就是说在person()中的get_age这个方法还在被使用中,所以GC不会释放person()和get_age()所占用的内存,简单来说:age这个参数不会被释放 会被保存下来.当调用:alert( temp() );alert( temp() );的时候 会输出11和12 也就是说 age = 10并没有被执行.闭包的注意点:既然GC不会回收,所以占用的内存是很大的外部函数的值改变时要注意 可能会影响到闭包中保存的总结: 因为在JavaScript中没有private私有变量的存在,所以想要达到这个效果 使用闭包是很不错的方法,同时可以用于一值保存函数中的变量,使其不会被GC所释放,GC不会自动释放活动的对象(在JavaScript中function也是对象).我想闭包既然是javascript中最好的特性之一,那么自然有他好的地方,具体的好个人认为 需要在实际开发中使用,用来积累经验.
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!