Javascript闭包详解

作者:邹阳 | 发表于:2016-04-17 15:01:32

阅读量:(244) | 所属栏目:编程


它是可访问一个函数作用域里变量的函数

1)含义:闭包也就是,子函数,可以使用父函数的局部变量、父函数的参数。

2)闭包优缺点:

3)使用闭包实现100的累加(将变量驻留在内存内):可以把function box 想象成 window ,则var age 就相当于在window下全局声明age,就好理解闭包了。全局下的变量不是一直都可以被其它的对象使用的,一个道理,所以全局下的变量也是驻留在内存中的。所以才说,闭包可以将变量驻留在内存中。

4)垃圾回收机制:正常情况下,函数内部的变量在函数执行完毕后就会被js垃圾回收机制所清除,但是有闭包时(函数内嵌套函数),因为内部变量要被子函数所使用,所以在执行了函数后,并不会被清除。上例中,age并不会被清除。它会驻留在内存中。
由于IE的JScript对象和DOM对象使用不同的垃圾收集方式,因此闭包在IE中会导致一些问题。就是内存泄露的问题,也就是无法销毁驻留在内存中的元素。解决办法是要让 该 变量=null,不然要等到浏览器关闭才能释放内存。

5)闭包里面的this指向的是全局的window,同理,通过匿名函数去执行一个函数,那么这个函数里面的this会代表window的。(可以通过XXXXXX.call(this)来解决) 详见李炎恢视频66的地18分钟
而在构造函数体内,this就代表当前构造函数所声明的对象。

6)记忆:闭包有3点,一点是this会指向window,二是局部变量驻留内存,三是会导致内存泄漏。(为什么要使用闭包:因为全局变量会导致变量污染,每个模块都可以调用必将引来灾难,所以推荐使用私有的,封装的局部变量)
回复内容:(还能输入1000字)
验 证 码: