闭包是什么
「函数」和「函数内部能访问到的变量」(也叫环境)的总和,就是一个闭包。简单说,就是一个函数用到了它外面的变量,这种用法叫闭包。
看个例子
1 | function foo(){ |
2 | var local =1 |
3 | function bar(){ |
4 | local +=1 |
5 | return local |
6 | } |
7 | return bar |
8 | } |
9 | var func = foo() |
10 | func() |
local 变量和 bar 函数组成了一个闭包。
闭包的作用
闭包常常用来间接访问一个变量,换句话说,就是隐藏一个变量。
假设我们在做一个游戏,在写其中关于「还剩几条命」的代码。
如果不用闭包,你可以直接用一个全局变量:
1 | var lives = 30 |
万一有人把这个改了怎么办?用局部变量
但是用局部变量别人又访问不到,怎么办呢?
暴露一个访问器(函数),让别人可以「间接访问」
1 | !function(){ |
2 | var lives = 30 |
3 | function award(){ |
4 | lives += 1 |
5 | } |
6 | function die(){ |
7 | lives -= 1 |
8 | } |
9 | }() |
lives 变量和 award 函数组成了一个闭包,lives 变量和 die 函数又组成了一个闭包。