关于闭包

73 阅读1分钟

闭包的概念

可以访问函数内变量的函数叫做闭包,形式上可以看作是函数嵌套函数,内部函数被return

  1. 关于闭包要注意一个问题变量是否要释放,全局的变量是不会被释放的,因为你不确定是否要释放
  2. 对于函数来说,函数里面的变量只要该函数被调用了就会释放,闭包除外
  function fn() {
    let count = 1;
    return () => {
      count++;
      console.log(count, 'count');
    };
  }
  const aa = fn(); //此处调用的是箭头函数
  aa();  //2
  aa();  //3

闭包的优点和缺点

1.优点:可以隔离作用域,不会造成全局污染

2.缺点:由于闭包长期驻留内存,长期这样会导致内存泄露

在进行性能优化的过程中:使用节流和防抖函数就是用的使用的闭包的原理

防抖:

防抖就是让你多次触发,只生效最后一次,适用于只需要触发一次的场景

function debounce(fn, delay) {
    let timer = null;
    return function () {
      clearTimeout(timer);
      timer = setTimeout(() => {
        fn.apply(this.arguments);
      }, delay);
    };
  }

节流:

节流是让你的操作,每隔一段时间触发一次,适用于多次触发要多次生效的场景

function throttle(fn, delay) {
    let flag = true;
    return function () {
      if (flag) {
        setTimeout(() => {
          fn.apply(this.arguments);
          flag = true;
        }, delay);
        flag = false;
      }
    };
  }