闭包的概念:为包含外部变量的函数及外部变量所创建的内存栈叫闭包
闭包的作用:通过函数调用的方式改变一个变量从而防止直接修改变量
Closures are created whenever a variable that is defined outside the
current scope is accessed from within some inner scope.
闭包的示例:
var local = "变量"
function bar() {
console.log(local)
}
local 变量和 bar 函数就组成了一个闭包(Closure)
问题1:创建闭包一定要返回一个函数吗?
不一定:
function wait(message){
setTimeout(function timer(){
console.log(message)
},1000)
}
wait("hi");
timer 函数访问了外部变量 message 就创建了闭包。
只要在某个内部作用域内访问在当前作用域之外定义的变量,就会创建闭包。
问题2:那为什么很多内嵌函数要被返回呢?
function foo(){
var local = 1
function bar(){
return local
}
return bar
}
var func = foo()
func()
很多情况下如果不 return,就无法使用这个闭包。把 return bar 改成 window.bar = bar 也是一样的,只要让外面可以访问到这个 bar 函数就行了。
所以 return bar 只是为了 bar 能被使用,也跟闭包无关。