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