定义:闭包就是能够读取其他函数内部变量的函数,在javascript语言中,只有在函数内部的子函数才能够读取局部变量,闭包起到了将函数内部与函数外部连接起来的桥梁作用。
函数a的内部函数b被函数a外部的变量引用时就创建了一个闭包。
特性:
封闭性:外界无法访问闭包内部的数据,除非闭包主动向外界提供访问接口;
持久性: 一般的函数调用完毕之后系统自动注销函数,而对于闭包来说,在外部函数被调用之后,闭包结构依然存在系统中,闭包中的数据依然存在,从而实现对数据的持久使用;
优点:减少全局变量、减少传递函数的参数量、避免变量之间相互影响、封装;
作用:①可以读取函数内部的变量; ②可以让这些变量的值始终保存在内存中;
注意点:①内存消耗过大,谨慎使用,否则会影响网页性能。在ie浏览器中可能会存在内存泄漏。解决办法是在退出函数前将不使用的局部变量全部删除 ②闭包会在父函数外部改变父函数内部变量的值。如果你把父函数当做对象使用,把闭包当做它的公共方法,把内部变量当做它的私有属性,需注意不要随便改变父函数内部变量的值。