function f1(){
let a = 1
function f2(){
a++
return a
}
return f2
}
var func = f1()
func()
1.闭包概念
上面代码中,a变量与f2函数就组成了一个闭包。
2.闭包特点
(1)函数套函数 函数套函数与闭包无关,只是为了创造一个外部可以使用的局部变量,既隐藏变量(使用闭包的目的) (2)return f2 return f2与闭包无关,只是为了让外面访问到f2函数,这样才能使用这个闭包。 使用window.f2=f2 效果一样。
3.闭包作用
闭包常常用来间接访问一个变量,既隐藏变量。
function(){
let a = 100
window.f1 = function(){
a += 1
}
window.f2 = function(){
a -= 1
}
}
这样,其他的js文件就可以window.f1()和window.f2()来操作a。别人不能直接访问变量a,防止a被误操作。
4.闭包缺点
(1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题。
(2)在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。