闭包

2022-03-31  本文已影响0人  glassUp

闭包:

就是函数嵌套函数,内部函数就是闭包
正常情况下,函数执行完成,内部函数就会销毁,释放内存空间,闭包,内部函数没有执行完成,外部函数就不会销毁

    function outerFun(){
      let a = 10;
      function innerFun(){
        console.log(a)       //作用域链,块区域找不到就一层一层往上找
      }
      return innerFun
    }

    let fun = outerFun();      //一般来说函数用完后,内部变量会销毁,释放空间,然而这个函数里面还有函数没使用,因此变量保存
    fun()    //之后变量才销毁

闭包的应用:

1.封装一段代码

//立即执行函数
    let module = (function(){
      let a = 10;
      let b = 20;      //这是私有变量,外面是访问不到的
      function add(){
        return a + b
      }
      function sub(){
        return a - b
      }
      return {
        add,
        sub
      }
    })()

    let result1 = module.add();
    let result2 = module.sub();
    console.log(result1);    //30
    console.log(result2);    //-10

2.保留循环的变量

var lis = document.getelementByTagName('li');
for(var i = 0 ; i<lis.length; i++){
     (function(i){
            lis[i].onclick = function(){
                  alert(i)
            }
            lis[i] = null
      })(i)
}

闭包的缺点

1.变量会驻留在内存中,造成内存损耗问题
解决:把闭包的函数设置成null
2.内存泄漏,这个问题只存在于ie浏览器

上一篇下一篇

猜你喜欢

热点阅读