zoukankan      html  css  js  c++  java
  • 闭包

    什么是闭包?
    函数嵌套函数,闭包中的变量不会被垃圾回收机制回收;
    闭包是一个有权访问另一个函数作用域中变量的函数;

    闭包有什么好处?变量常驻内存;避免全局变量污染;模块化代码

    1 //~~~一般
    2 function aaa(){
    3     var a = 1;
    4     a ++;
    5     alert(a);
    6 }
    7 aaa();//2
    8 aaa();//2
     1 //~~~常驻内存
     2 function aaa(){
     3     var a = 1;
     4     return function(){
     5         a ++;
     6         alert(a);
     7     }
     8 }
     9 var bbb =aaa();
    10 bbb();//2  >>  常驻内存
    11 bbb();//3
     1 //~~~改造
     2 var aaa =(function(){
     3     var a = 1;
     4     return function(){
     5         a ++;
     6         alert(a);
     7     }
     8 })();//先自执行一次
     9 aaa();//2
    10 aaa();//3
     1 //~~~私有方法,模块化代码
     2 var aaa =(function(){
     3     var a = 1;
     4     function bbb(){
     5         a ++;
     6         alert(a);
     7     }
     8     function ccc(){
     9         a ++;
    10         alert(a);
    11     }
    12     return {
    13         b : bbb,
    14         c : ccc
    15     };
    16 })();//先自执行一次
    17 aaa.b();
    18 aaa.c();
     1 //~~~常用
     2 var aLi = document.getElementsByTagName("li");
     3 for(var i = 0;i < aLi.length;i ++){
     4     // aLi[i].onclick = (function(i){
     5     //     return function(){
     6     //         console.log(i);
     7     //     }
     8     // })(i);//先自执行一次
     9 
    10     (function(i){
    11         aLi[i].onclick = function(){
    12             console.log(i);
    13         };
    14     })(i);
    15 }

    IE下内存泄漏

    1 //~~~way1
    2 var oDiv = document.getElementById("div1");
    3 var id = oDiv.id;
    4 oDiv.onclick = function(){
    5     alert(id);
    6 };
    7 oDiv = null;
    1 //~~~way2
    2 var oDiv = document.getElementById("div1");
    3 oDiv.onclick = function(){
    4     alert(oDiv.id);//互相引用引发内存泄漏
    5 };
    6 window.onunload = function(){
    7     oDiv.onclick = null;
    8 };
  • 相关阅读:
    C#中关于zip压缩解压帮助类的封装(转)
    MonoTouch的官网
    Android布局
    VS2010网站发布
    HTML5的PLACEHOLDER属性
    some np problem
    srm 578
    opencv 边缘算子
    Python扩展(pybind11混编)
    PyTorch之初级使用
  • 原文地址:https://www.cnblogs.com/jiujiaoyangkang/p/5879384.html
Copyright © 2011-2022 走看看