什么是闭包
为了便于理解我在代码中使用了中文:
1 | !function(){ |
在上面的代码中,在一个立即执行函数中有一个局部变量a,有一个函数fn,在函数fn中可以访问到局部变量a,这就是一个闭包:
如果一个函数使用了它范围外的变量,这个函数+这个变量就叫做闭包。
闭包需要函数嵌套函数,再return一个函数吗?
- 把a嵌套在一个立即执行函数里是为了获得一个局部变量,如果不把a放在函数里,a就是一个全局变量,无法达到闭包的目的——隐藏变量。
所以嵌套函数是为了获得一个局部变量,与闭包无关。 - return fn 相当于 window.fn = fn ,这是为了让外面可以访问到fn这个函数。
所以 return 是为了fn能被使用,也与闭包无关。闭包的作用
闭包用来间接访问一个变量,也就是隐藏变量。 例如,不想让人直接访问一个变量a,可以将变量a作为局部变量,在一个立即执行函数里声明变量a,但是局部变量别人又访问不到,所以需要暴露一个访问器(函数),让别人可以间接访问。1
2
3
4
5
6!function(){
var a = '局部变量a'
window.间接访问a = function(){
console.log(a)
}
}
所谓闭包的作用,我们在写代码时并没有刻意地去用闭包,写完以后发现满足了闭包的定义。