闭包指的是一个函数可以访问另一个函数作用域中变量。常见的构造方法,是在一个函数内部定义另外一个函数。内部函数可以引用外层的变量;外层变量不会被垃圾回收机制回收。
注意,闭包的原理是作用域链,所以闭包访问的上级作用域中的变量是个对象,其值为其运算结束后的最后一个值。
请问他的优点和缺点是啥?
优点:避免全局变量污染。缺点:容易造成内存泄漏。
优点正是闭包的特性,可以访问另一个函数的变量。
1:变量长期驻扎在内存中;2:避免全局变量的污染;3:私有成员的存在 ;
常用到的应用有,柯里化、防抖、节流,可以做到一些性能优化
缺点:函数的活动对象会随着执行期上下文一起销毁,但是,由于闭包引用另外一个函数的活动对象,因此这个活动对象无法被销毁,这意味着,闭包比一般的函数需要更多的内存消耗。尤其在IE浏览器中需要关注。由于IE使用非原生javascript对象实现DOM对象,因此闭包会导致内存泄露问题。
性能问题,使用闭包时,会涉及到跨作用域访问,每次访问都会导致性能损失。因此在脚本中,最好小心使用闭包,它同时会涉及到内存和速度问题。不过我们可以通过把跨作用域变量存储在局部变量中,然后直接访问局部变量,来减轻对执行速度的影响。
优点是避免全局污染,起到块级作用域的作用;可以保存外部函数的变量,可以用在把一些不经常变动计算起来又比较复杂的值保存起来,节省每次的访问时间; 封装私有变量.
闭包的缺点:对内存消耗有负面影响,因内部函数保存了对外部变量的引用,导致无法被垃圾回收,增大内存使用量,所以使用不当会导致内存泄漏;对处理速度具有负面影响。闭包的层级决定了引用的外部变量在查找时经过的作用域长度;