关于闭包

127 阅读2分钟
  1. 什么是闭包?
    • 闭包即闭包函数,当一个函数使用到外部作用域的变量,这个函数就是闭包函数
  2. 如何产生闭包?
    • 函数嵌套函数,内部函数使用到外部函数变量的时候,就会产生闭包
  3. 闭包的原理
    • 其实就是利用了作用域链的特性,作用域链就是在当前执行环境下访问某个变量时,如果不存在就一直向外层寻找,最终找到最外层也就是全局作用域
  4. 闭包的形式
    1. 闭包是一个函数,而且存在另一个函数当中
    2. 闭包可以访问到父级函数的变量,且该函数不会被销毁
  5. 闭包什么时候产生?
    1. 外部函数被调用的时候
    2. 内部函数声明的时候
  6. 闭包的好处
    1. 延长局部变量的生命周期
    2. 模块化,减少全局的污染
  7. 闭包的缺点
    • 由于缓存下来的变量数据还会占用内存,所以会导致内存泄露,内存泄露过多会导致内存溢出,程序会宕机
  8. 如何解决闭包的副作用?
    • 将指向闭包的所有变量全部移除,调用完就赋值为null
  9. 闭包是根据调用时环境还是创建时环境
    • 例题一
    //全局,也就是foo函数的创建时环境
    let x = 10;
    
    function foo() {
      console.log(x);
    }
    
    function bar() {
    //调用时环境
      let x = 20;
      foo();  // 10 也就是说闭包根据的是创建时的函数环境,跟调用环境无关
    }
    
    bar();
    
    • 例题二
    function foo() {
      let x = 10;
    
      // 闭包,bar的创建环境
      function bar() {
        return x;
      }
      return bar;
    }
    
    let x = 20;
    
    // 调用环境
    let bar = foo();
    
    // 调用 bar 函数
    bar(); // 10,