什么是闭包?闭包详解

  • Post category:JavaScript

    首先要知道JavaScript是使用垃圾回收的语言,它会每隔一段时间就会释放内存进行闲置资源回收。像函数中的局部变量,函数执行时在内部使用了变量,栈内存会分配空间以保存相应的值。在函数使用结束后,这个局部变量就不需要了,占用的内存就会被释放。

那我们若是想要使这个变量不被清理,一直处于被使用中,那就得让他一直被引用,那么我们可以在一个函数里面嵌入一个函数,小函数里面引用大函数里的变量,并把这个函数返回到全局中,此刻我们便可让它不被清理并在全局中使用它了

放代码:

 1 function big(){//大函数
 2     var savevar = 10;//数据
 3     function little(){//小函数
 4         return savevar;//引用大函数的数据,并把数据返回出去
 5     }
 6     return little;//把小函数返回出去
 7 }
 8 var deal = big();//调用大函数,返回出来小函数
 9 console.log(deal); // 返回的是little()这个小函数函数,如果要访问到num就需要调用这个函数
10 var money = deal(); //调用小函数,返回出来小函数里操作的值
11 console.log(money) // 10,输出

那平常使用闭包有什么好处呢?

优点:

  1. 作用域空间不销毁,所以变量也不会被销毁,增加了变量的声明周期
  2. 在函数外部可以访问函数内部的变量
  3. 护私有变量,将变量定义在函数内,不会污染全局

缺点:

  1. 因为函数外部可以访问函数内部的变量,导致变量和内部的函数引用关系一直存在,内存不能销毁,会一直占用,使用量较大时会导致内存溢出

 

 

详细见另外一篇《函数自调用与闭包》