- 什么是闭包?
这里就要用到函数变量的作用域了,函数的内部可以直接读取全局变量,但是函数的外部无法读取函数内的局部变量。那么,如果我们要读取函数内部的局部变量,就需要再写一个函数,读取到想要的局部变量。即闭包就是能够读取其他函数内部变量的函数。简单来说我们说如果一个函数加上了外部的变量,这个函数加上这个变量就是闭包。
function f1(){
let a = 2 //声明一个局部变量,这个变量可以在f2中访问
function f2(){ //声明一个函数
console.log(a) //访问函数外部的变量
}
}
- 闭包的用途
间接访问一个变量。在实际开发中,有些变量我们不能直接访问,害怕不小心被更改;也不能放在局部变量中,这样找不到。所以需要闭包这个桥梁。用一个函数间接访问。以游戏中的生命条数举例。
!function(){
var lives = 50
window.奖励一条命 = function(){
lives += 1
}
window.死一条命 = function(){
lives -= 1
}
}()
(代码转载方应杭老师——“每日一题”js中的闭包是什么?)
- 闭包的缺点
闭包会使使函数中的变量保存在内存中,所以大量的使用闭包就会造成大量的变量堆积在内存中。让网页性能变差。另外,在ie中,使用完闭包后,根本回收不了引用后的变量。就造成了网上常说的内存泄露。然而要清楚。这不是闭包的原因。这是ie的原因。