函数和函数内部能访问到的变量的总和,就是一个闭包。
闭包就是在代码块里面,定一个自由变量,代码块中的函数能够访问到。
var local = '变量'
function foo(){
console.log(local)
}
foo()是一个函数,在这个函数内部能够访问到local这个变量;- 这个local要是一个局部变量;
为什么用函数套着呢?
function foo(){
var local = 1
function bar(){
local++
return local
}
return bar
}
var func = foo()
func()
- 这里面确实有闭包,local 变量和 bar 函数就组成了一个闭包(Closure)
- 是因为需要局部变量,所以才把 local 放在一个函数里,如果不把 local 放在一个函数里,local 就是一个全局变量了,达不到使用闭包的目的——隐藏变量(等会会讲)。
- 为什么要 return bar 呢?
因为如果不 return,你就无法使用这个闭包。把 return bar 改成 window.bar = bar 也是一样的,只要让外面可以访问到这个 bar 函数就行了。
所以 return bar 只是为了 bar 能被使用,也跟闭包无关。
解决了什么问题?
1.避免污染全局环境。(因为用的是局部变量) 2.提供对局部变量的间接访问。 3.维持变量 优点:简单好用 缺点:使用不当会造成内部泄露