闭包深入理解

103 阅读2分钟
  1. 闭包是指有权访问另一个函数作用域的变量的函数——一个作用域可以访问一个函数内部的局部变量。这个被访问变量所在的函数就是一个闭包函数。例如:

    //这里返回的funciton调用了fun里面定义的num,那么fun函数就是一个闭包
    function fun(){
      var num=20;
      return funciton(){
        console.log(num);
    }
    }
    
  2. 闭包创建方式:

  • 在一个函数内容创建另一个函数。
  • 返回一个函数(子函数可以使用父函数里申明的变量)——高阶函数,闭包主要实现思路。

   3.闭包的作用:延伸了变量的作用范围

  • 函数外部的环境可以访问函数内部的变量。
  • 那个被其他作用域引用的变量只有等所有引用其的函数执行完毕才会销毁。

   4.立即执行函数与闭包的关系:立即执行函数也可称为小闭包,因为立即执行函数里面定义的 函数都可以使用它的输入参数。

    5.闭包可能带来的问题:内存泄露。因为变量的作用范围被延长了,所以如果这个变量一直可能被使用,那么它就不会被垃圾回收机制给回收,就会造成内存泄露。

    6.上述的内存泄露大多出现在异步函数的情况下。而异步函数分为一般的回调函数、定时器中的回调函数、事件中的回调函数,这些情况下使用闭包就有可能造成内存泄露。

    7.闭包的作用域分析:如果使用的是匿名函数实现的闭包,那么匿名函数里面的this是指向window的。

    8.有名函数的this指向其调用者。