函数"/>
前端 闭包函数
闭包
闭包就是能够读取函数内部的一个变量的函数。
应用场景:
当我们在封装一个通用模块时,在模块中定义一个变量,不想让这个变量污染全局变量并且不会被内存释放的时候,就可以使用闭包;
创建闭包方式:
函数A里面创建了另一个函数B,并返回这个B函数,在B里面修改了A函数中定义的变量,这个变量会一直保存在这个闭包形成的环境中,不会被垃圾回收处理。
function A(){var n=999;return function B(){alert(n); // 999}
}
变量作用域
变量作用域:全局(函数外部)和局部变量,
局部变量:var声明变量只在函数作用域中有效【函数中声明的变量作用域】
没有var声明就会变成全局变量;有var就是局部变量;var具有变量提升的功能
函数可以用来创建函数作用域,函数就像一层半透明玻璃,里面可以看到外面,外面看不到里面的变量
函数的生存周期
全局变量:生存周期是永久的,除非我们主动销毁这个全局变量
var声明的局部变量:当退出函数时,他会随着调用函数的结束而随之销毁
闭包函数:当退出函数后,局部变量不会消失,在某个函数中存在
闭包的作用:
封装变量;延续局部变量的寿命
封装变量因为使用闭包可以访问到函数内部变量
延续局部变量寿命是因为不会随函数调用结束而被垃圾回收掉
闭包与内存管理
闭包会造成内存泄露,所以要尽量减少闭包的使用,其实这种说有误的。因为使用闭包是开发者自己定义的,在不用的时候将这个变量置为null就不占内存了;
其次循环应用的问题它会造成内存泄漏,这个主要还是因为浏览器本省的原因,循环引用计数造成的,只要将变量置为null也就没有这个问题了
使用闭包注意:
由于使用闭包使得函数内部的变量保存在内存中,内存消耗很大,网页性能不好,
避免滥用闭包;【解决方法:在退出函数前,将不适用的局部变量全部删除】
把父函数当作对象使用,把闭包当作它的公用方法,把内部变量当作它的私有属性
不要随便改变父函数内部变量的值
闭包会在父函数外面,改变父函数内部的变量
更多推荐
前端 闭包函数
发布评论