闭包问题

  • 什么是闭包?
    定义:函数嵌套函数,内部函数可以引用外部函数的参数和变量,并且参数和变量不会被垃圾回收机制收回
    如下面函数:
function aa() {
    let a = 1;
    return function () {
        a++;
        console.log(a);
    }
}
let b =aa();
b(); //2
b();//3
  • 闭包的好处
    1)将变量长期存储在内存中
    2)避免全局变量的污染
    3)可以存在私有成员
    用法
    1.模块化代码
let aaa = (function () {
    let a = 1;
    return function () {
        a++;
        console.log(a);
    }
})();
aaa();
aaa();
let aaa = (function () {
    //私有成员
    let a = 1;
  function bbb() {
        a++;
        console.log(a);
    }
    function ccc(){
      a++;
      console.log(a);
    }
    return{
        a:a,
        b:bbb,
        c:ccc
    }
})();

console.log(aaa.a); //1
aaa.b();//2
aaa.c();//3
console.log(aaa.a); //1

2.在循环中直接找到对应元素的索引

let ali = document.getElementsByTagName('li');
for( var i = 0 ; i < ali.length; i++)
    {
        (function (a) {
            ali[i].onclick = function () {
                alert(a);
            }
        })(i);
    }
   let ali = document.getElementsByTagName('li');
    for(var i = 0; i<ali.length; i++){
        ali[i].onclick = (function (a) {
            return function () {
                alert(a);
            }
        })(i)
    }

使用let 解决(let支持块级作用域)

    let ali = document.getElementsByTagName('li');
    for(let i = 0; i<ali.length; i++){
        ali[i].onclick = function () {
            alert(i);
        }
    }
  • 解决闭包引起的内存泄露问题(IE)
    如果闭包作用域中存在一个html元素,那么就意味着该元素将无法销毁
var div  =document.getElementById('div');
    div.onclick = function () {
        alert(div.id);
    };

上面就会造成在IE下的内存泄露问题
解决方式

window.onunload = function () {
        div.onclick = null;
    }
var id = div.id;
div = null;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • JS的闭包真的是一个老生常谈的知识点了,无奈它并不是那么好掌握,但是它又是那么重要,很多高级应用的开发都会用到闭包...
    一木_qintb阅读 2,444评论 0 1
  • jvascript闭包是每个前端工程师必须了解的知识点,它简便的解决很多项目 中棘手的问...
    zhangjianli阅读 2,350评论 0 3
  • $HTML, HTTP,web综合问题 1、前端需要注意哪些SEO 2、 的title和alt有什么区别 3、HT...
    Hebborn_hb阅读 10,084评论 0 20
  • 周五,早! 晴雨不定的一天!
    HAIXIA吖阅读 1,612评论 2 2
  • 那一刻,我升起风马,不为乞福,只为守 候你的到来。 那一天,闭目在经殿香雾中,蓦然听见, 你颂经中的真言。 那一日...
    五月晶晶阅读 2,286评论 0 1