闭包

如何产生闭包?

当一个内部函数引用了外部函数的变量时,就产生了闭包

function fn1(){
   var a = 2
   var b = 'abc'
   function fn2(){
      console.log(a)
     }
  }
fn1()

闭包到底是什么?

使用chrome调试查看
理解一:闭包是嵌套的内部函数(绝大部分理解)
理解二:包含被引用变量的对象(极少数人)

闭包产生的条件

函数嵌套。内部函数引用了外部函数的变量

常见的闭包

·将函数作为另一个函数的返回值

function fn1(){
          let a = 2
          function fn2(){
              a++
              console.log(a)
          }
          return fn2
      }
      var f = fn1()
      f() //3
      f() //4

·将函数作为实参传递给另一个函数调用


image.png

闭包的作用

1,使用外部函数内部的变量在函数执行完成后,仍然存活在内存中(延长了局部变量的生命周期)
2,让函数外部能直接访问函数内部的局部变量
上面代码通过调用f()就能操作函数的变量

闭包的缺点及解决

缺点:1,函数执行完后,函数内部的局部变量没有被释放
2,容易造成内存泄露
解决:1,能不用就不用 2,及时释放即让内部函数=null

你可能感兴趣的:(闭包)