什么是闭包

82 阅读1分钟

1.定义:

当一个嵌套的内部函数引用了外部函数的变量或者函数时,外部函数在执行时就产生了闭包

典型的闭包:

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

2.将函数作为实参传给另一个函数调用

闭包特点:

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

闭包的作用:

1.闭包可以延长外部函数的局部变量的生命周期,可以实现计数器,累加器这类

2.可以形成变量的局部作用域,实现函数封装

缺点:

函数定义的变量和数据会一直存在内部函数中,不会被及时释放,这样会导致内存泄漏,解决:尽量不使用闭包;用完后及时释放

计数器实现

 1:function createCounter() {
 2:   let counter = 0
 3:   const myFunction = function() {
 4:     counter = counter + 1
 5:     return counter
 6:   }
 7:   return myFunction
 8: }
 9: const increment = createCounter()
10: const c1 = increment()
11: const c2 = increment()
12: const c3 = increment()

参考链接:blog.leapoahead.com/2015/09/15/…

mp.weixin.qq.com/s?src=11&ti…

闭包与循环问题

  for(var i=0;i<10;i++){
    (function(j){
      setTimeout(function(){
          console.log(j);
      },1000)
    })(i)
}

分析:如果不加立即执行函数,会输出连续的10个10,因为 JS 是单线程的遇到异步的代码不会先执行(会入栈),等到同步的代码执行完 i++ 到 10时,异步代码才开始执行此时的 i=10 输出的都是 10。

参考链接:mp.weixin.qq.com/s?src=11&ti…