js中的闭包

对于初学者来说闭包是一个不太好理解的知识点。

那么什么是闭包呢,他有哪些特性又有哪些不好的地方呢

闭包是一种保护机制,为了保护私有作用域中的私有变量不受全局变量的污染

闭包大概的定义:

在js中,函数套函数,子函数使用父函数的参数或变量,并且子函数被外界所引用(没有释放)。此时父函数的参数或变量是不会被浏览器垃圾回收机制所回收,这个时候父级就形成了闭包环境

闭包的特点:

1、函数套函数

2、子函数访问父函数的参数/变量

3、子函数被外界所使用着,不会被释放

function fn(){
    let a =10;
    return function(){
     a++;
    console.log(a);
    }
}
    let f = fn();
    console.dir(f);

闭包的应用场景:

  • 存储父函数的参数或者变量
  • 保护私有变量不受外界的干扰

闭包选项卡

//用匿名函数包一个函数
 const btn = document.getElementsByTagName('button');
   const divs = document.getElementsByTagName('div');
   for(var i=0;i<btn.length;i++){
     (function(j){  //函数套函数
        btn[j].onclick = function(){ //子函数被外界使用
        //子函数使用父函数的参数
          for(var i=0;i<btn.length;i++){
              btn[i].className = '';
              divs[i].className = '';
          }
        this.className = 'active';
        divs[j].className = 'show';
      }
     })(i)
     
  }

闭包的缺点:相对于普通函数要消耗内存,使用不当容易造成内存泄漏。所以一般尽量避免使用闭包

原文地址:https://www.cnblogs.com/theblogs/p/9943390.html