首页 > 代码库 > JS - 闭包学习
JS - 闭包学习
刚学习了闭包,主要是从廖雪峰的官方网站和阮一峰的网络日志中学的。总结如下:
JS的闭包,就是一个函数A里面有一个内嵌的函数B,A 返回的是B 。B可以访问A的参数和局部变量,当A返回B时,A的参数和局部变量就保存在B中,这就是闭包。B在返回时并没有立刻执行,z直到调用时候B()才执行。
在A里定义局部变量,一定要用到var 来定义,否则该变量就默认为全局变量了。
闭包的用途
闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
(摘自阮一峰的网络日志)
在面向对象的程序设计语言里,比如Java和C++,要在对象内部封装一个私有变量,可以用private
修饰一个成员变量。
在没有class
机制,只有函数的语言里,借助闭包,同样可以封装一个私有变量,从外部读取局部变量。
(摘自廖雪峰的官方网站)
使用闭包的注意点
1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
(摘自阮一峰的网络日志)
3)返回闭包B时牢记的一点就是:闭包B不要引用任何循环变量,或者后续会发生变化的变量。如果一定要引用循环变量怎么办?方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变。(摘自廖雪峰的官方网站)
JS - 闭包学习