zoukankan      html  css  js  c++  java
  • 闭包的有点以及出现的内存泄露2016/4/12

    (function(){
    alert(1);
    })();

    按照正常的写法会出现i都为3因为for循环很快结束了

    window.onload = function(){var aLi = document.getElementsByTagName('li');

    方法1: for(var i=0;i<aLi.length;i++){

         (function(i){

        aLi[i].onclick = function(){
        alert(i);
        };})(i);

    方法2:

        for(var i=0;i<aLi.length;i++){


        aLi[i].onclick = (function(i){

        eturn function(){
        alert(i);
          }
    })(i);


    }

    };

    通过吧i放在函数中传进去这样i会保留在内存中i,因此结果就是0,1,2

    简单来讲就是:方法套方法,不影响外面的变量,方法里面的变量会被释放掉。

    //IE下会引发内存泄漏

    /*window.onload = function(){
    var oDiv = document.getElementById('div1');

    oDiv.onclick = function(){
    alert(oDiv.id);
    };

    window.onunload = function(){
    oDiv.onclick = null;
    };

    };*/

    window.onload = function(){
    var oDiv = document.getElementById('div1');

    var id = oDiv.id;

    oDiv.onclick = function(){
    alert(id);
    };

    oDiv = null;

    };

  • 相关阅读:
    导航守卫
    asnyc
    扩展运算符 ···
    模版字符串
    iterator迭代器
    箭头函数
    解构
    变量let const
    vueUI可视化
    python图像特征提取
  • 原文地址:https://www.cnblogs.com/hduhdc/p/5381990.html
Copyright © 2011-2022 走看看