闭包
用文字简单概括一下闭包
理论简述版:函数执行形成私有作用域,保护里面的私有变量不受外界干扰,这种保护机制称为闭包。
市面共识版:函数执行形成一个不销毁的私有作用域,称为闭包。
代码简单实现
//柯里化函数
function fn(){
return function(){}
}
var f = fn();
//惰性函数
var util = (function(){
return {}
})();
闭包项目实战应用
真是项目中为了保证js性能(堆栈内存性能优化),应尽可能的减少闭包的使用,因为不销毁的堆栈内存耗性能。
闭包主要两个作用
保护:在多人团队开发中可能会造成全局变量污染(变量冲突),这时可以使用闭包,让自己的代码在一个私有作用域下,与他人代码互不干扰。
保存:只要有外部变量引用,作用域就不会销毁,所以作用域内的成员依然存在。
闭包的缺点
还是因为不销毁作用域,内部成员没有被释放,长时间占用内存造成内存泄漏。
解决办法
1、能不用闭包就不用闭包。
2、及时释放。
内存溢出和内存泄漏
内存溢出
程序运行所需内存超出可用内存,就抛出内存溢出的错误,一般表现为程序崩溃。一般导致内存溢出的原因是计算量过大或者程序陷入死循环。
内存泄漏
占用的内存没有及时释放,内存泄漏积累多了容易导致内存溢出。
常见的内存泄漏:
1、意外的全局变量(函数内直接声明的全局变量,等函数执行完依然存在而没有被释放)。
2、定时器没及时清理。
3、闭包。