JavaScript闭包

1.什么是闭包

包是指函数定义和函数表达式位于另一个函数的函数体内的函数。这些内部函数可以访问外部函数的局部变量,参数和定义的其他内部函数。当其中一个这样的内部函数被调用时,就会形成闭包。创建闭包的常见方式是在一个函数中创建另一个函数,通过另一个函数访问这个函数的变量。


2.闭包的特性

一、函数嵌套函数

二、函数内部可以引用外部的参数和变量。

三、参数和变量不会被垃圾回收机制回收。

3.JavaScript 垃圾回收机制

(1)如果一个对象不再被引用,那么它就会被GC回收;

(2)如果两个对象互相引用,不被第三个对象引用,那么他们也会被回收。

4.闭包的用途:将变量维持在内存中,带来更好的安全性和封装性。
(1)匿名自执行函数
有的函数只需执行一次,其内部变量无需维护,即模块化代码可以避免全局变量的污染,这样可以使用闭包



(2)结果缓存
在开发的过程中,有时我们希望让一个结果长期贮存在内存中,当调用函数的时候,它可以首先在缓存中寻找,找到就直接返回值;找不到时通过计算再更新缓存。闭包正可以做到这一点,因为他不会释放外部的引用。


我们可以像 CacheSearchBox.attachSearchBox("Nomber1"); 这样向其中添加对象,第二次调用的时候就可以直接从缓存中读取。
(3)封装

(4)实现类和继承


5.闭包的弊端
由于ie的js对象和dom的js对象的垃圾回收机制不一样,因此在ie中会导致内存泄漏,也就是无法销毁驻留在内存中的元素。为了避免这个问题可以采取解除引用的方法。


你可能感兴趣的:(JavaScript)