12-闭包

118 阅读1分钟

闭包

1.1 闭包的作用之一 ———— 保存

用选项卡的 🌰 tab选项卡切换

for (var i = 0; i < tabList.length; i++) {
  //方法一 闭包解决:
  /* tabList[i].onclick = (function(n){
          return function(){
              changeTab(n)
          }
      })(i) */

  //方法二 闭包解决:
  /* (function(n){
        tabList[n].onclick = function(){
            changeTab(n)
        }
      })(i) */

  //方法三:自定义属性
  tabList[i].index = i;
  tabList[i].onclick = function () {
    changeTab(this.index);
  };
}
//方法四:es6方式
for (var i = 0; i < tabList.length; i++) {
    tabList[i].onclick = function(){
        changeTab(i)
    }
}

1.2 闭包的作用之 -保护

  • 保护私有作用域中的私有变量不受外界的干扰
let x =5;
  function fn(x){
    return function(y){
      console.log(y+(++x));
    }
  }
  let f = fn(6);//
  f(7);//7+1+6 = 14
  fn(8)(9);//8+9+1 = 18
  f(10);//10+1+7 = 18
  console.log(x);//5

注意点:

1. let声明的变量仅在块级作用域内有效