要弄懂闭包是什么,我们需要先了解闭包的作用。
那么闭包的作用是什么? ---保护变量。
假设我们设计一个游戏,人物的血量设置为100。那么我们可以这样写:
var HP = 100
function 被砍() {
HP -= 50
return HP
}
可以看到,HP是一个全局变量,很容易被修改,一不小心直接改成-1000000怎么办呢?或者我们可以把它放在一个函数里,成为局部变量,但我们在其他地方访问不到。那么现在我们就可以来用闭包了。
为了隐藏变量HP,我们先在外面定义一个函数:
function 英雄() {
var HP = 100
function 被砍() {
HP -= 50
return HP
}
}
变量HP已经变为局部变量,外界访问不了HP,也无法修改它。但在被砍的时候,我们需要知道自己的血量,这就要求我们可以访问,但不能修改HP。
为了对外提供接口,我们可以这样写:
function 英雄() {
var HP = 100
function 被砍() {
HP -= 50
return HP
}
return 被砍// 这个格式可以将 被砍 这个函数作为开放接口,使外界访问
}
也可以这样:
function 英雄() {
var HP = 100
window.被砍 = function () {
HP -= 50
return HP
}
}
以上两种方法都保护了变量HP,同时HP也可以被外部访问,但不能被更改。
这就是闭包。