昨天说了闭包很牛逼,很有用,今天来讲一下,它有什么用处。
它的用处主要有二个,
1,读取函数内部的变量;
2,可以让这些变量的值一直保存在内存中,(内存泄露就是这么产生的)
口说无凭,先上代码:
颤抖吧,闭包!!
(哈哈哈,我很喜欢这种抖的感脚)
在上面的代码中,s1是s2的父函数,那么s1的局部变量对于s2就是可读的,
而xx实际上就是闭包s2函数了,
代码中,xx一共运行了二次,而它的值先是99,然后是100。
这说明s1的局部变量n,一直在内存中没有被清除。。
真相只有一个:
1、s1函数的局部变量n,对于s2函数来讲就是一个全局变量了;
2、s2函数内的n就导致,s2与s1的局域变量n有了引用关系,
3、而s2又依赖于s1,因此在运行中,s1也一直在内存中,不会被垃圾回收。
4、testval,它没有用var声明,所以它是一个真正的全局变量,同时它也是一个匿名函数,而匿名函数本身就是闭包的一种。
5、可以在作用域链的最外层操作testval,因为它是真正的全局变量,所以它相当于是一个setter方法,可以穿透s1函数,从最外层直接对它的内部变量n进行操作。
这就是闭包的,,,,基本情况啦,
话不说满,省得被打脸,哈哈,,
今天就到这,下次再聊