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 };
  • 相关阅读:
    小程序中自定义组件
    rem是如何实现自适应布局的?
    基于vue前端状态管理模式
    vue项目使用keep-alive的作用
    JS移动元素的方法
    es6 promise then对异常处理的方法
    async/await 中await接收的promise的问题
    angularjs ngRoute demo
    angularjs $watch demo
    Html5 Geolocation demo
  • 原文地址:https://www.cnblogs.com/jiujiaoyangkang/p/5879384.html
Copyright © 2011-2022 走看看