闭包:
就是函数嵌套函数,内部函数就是闭包
正常情况下,函数执行完成,内部函数就会销毁,释放内存空间,闭包,内部函数没有执行完成,外部函数就不会销毁
function outerFun(){
let a = 10;
function innerFun(){
console.log(a) //作用域链,块区域找不到就一层一层往上找
}
return innerFun
}
let fun = outerFun(); //一般来说函数用完后,内部变量会销毁,释放空间,然而这个函数里面还有函数没使用,因此变量保存
fun() //之后变量才销毁
闭包的应用:
1.封装一段代码
//立即执行函数
let module = (function(){
let a = 10;
let b = 20; //这是私有变量,外面是访问不到的
function add(){
return a + b
}
function sub(){
return a - b
}
return {
add,
sub
}
})()
let result1 = module.add();
let result2 = module.sub();
console.log(result1); //30
console.log(result2); //-10
2.保留循环的变量
var lis = document.getelementByTagName('li');
for(var i = 0 ; i<lis.length; i++){
(function(i){
lis[i].onclick = function(){
alert(i)
}
lis[i] = null
})(i)
}
闭包的缺点
1.变量会驻留在内存中,造成内存损耗问题
解决:把闭包的函数设置成null
2.内存泄漏,这个问题只存在于ie浏览器
网友评论