什么是闭包
如果一个函数用到了函数外的变量,那么这个变量以及这个函数就是个闭包
举个简单的例子
function f1(){
var n=111;
function f2(){
console.log(n) //111
}
}
在上述代码中,函数f2在函数f1的内部,这个时候,f1内部的所有局部变量对于f2都是可见的,反过来则行不通。
因此闭包可以简单理解成**“定义在一个函数内部的函数”**
闭包的用途
-
闭包常常用来间接访问一个变量,也可以说成隐藏一个变量。
- 当我们不想让别人直接访问一个变量的时候,就会选择声明一个局部变量,但是局部变量别人又访问不到,于是暴露一个函数,让别人可以间接的访问
function(){
var n =10
window.xxx = function(){
n++
}
window.yyy=function(){
n--
}
}()
当其他js文件调用window.xxx或者window.yyy的时候,就可以操作到n的值了
- 闭包还可以让这些变量始终保持在内存中,不会因为外部函数被调用后便被自动清除。
闭包的缺点
之前提到了,闭包会将变量一直保持在内存中,因此如果滥用闭包的话,内存消耗就会很大,十分影响网页的性能,在IE中甚至可能会造成内存泄漏。
解决的方法其实也很简单,在每次退出函数之前,将不使用的变量全部删除就行了