定义:闭包是打破作用域链的规则,能够读取其他函数内部变量的函数,在js中,只有函数内部的子函数才能读取局部变量,所以闭包一般是一个函数套函数的结构,将子函数返回到外面用一个全局变量存储起来,这就叫闭包。

特点:①函数套函数,返回子函数。
   ②返回的子函数存在一个全局变量中。
           ③执行外层函数后,该函数的局部变量会被存储在堆中,不会被垃圾回收机制回收。

优点:①防止变量被污染
           ②可以保存私有变量

缺点:会造成内存泄漏

  函数中用var定义的变量在该函数运行完即被销毁。而在闭包中,内层函数调用了外层函数的局部变量,并且返回给外面的全局变量,该局部变量会被存储起来。因为外层函数返回的是一个函数(返回了内层函数),函数就是一个对象,所以该局部变量被保存到了堆中,即使将接收的那个全局变量设置为null,也不会将该局部变量销毁,这样就保存了外层函数的私有变量了,同时也可能会造成内存泄漏。

如何解决闭包的缺点:

  闭包不使用的时候,要及时释放,就是将引用内层函数的变量赋值null。

  尽量保持闭包对象的数量很少或者只用一个闭包。

闭包的应用:

  匿名自执行函数,函数在执行完后会立即释放资源,不会造成变量的污染。

  jquery框架就是闭包的应用。

  代替全局变量。

什么叫垃圾回收机制?

  每隔一段时间,垃圾回收器去内存中找到那些不再使用的值,然后给它释放掉,一次来缓解内存的压力。