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