闭包是前端面试的时候,必然会问到的问题。码龄一年的我在实际应用的时候还没有应用到。但是先搞定面试先。等以后开发经验再多一点的时候,再加更多的理解吧。
闭包: 内部函数总是可以访问其外部函数的参数和变量
其实理解这句话要先理解js的变量作用域,函数内部可以直接读取全局变量,但是在函数外部是不可以读取函数内的局部变量。所以需要闭包来访问函数内部的变量。
function outerFunc() {
var name = "内部函数变量";
function innerFunc() {
alert(name);
}
return innerFunc;
}
var func = outerFunc()
func() // 弹窗显示'内部函数变量'
闭包的作用: 最简单的理解是闭包最后返回的是同一地址中父级函数中对应变量最终的值。
为什么要强调同一地址中,直接看一个列子
例子1
function outerFunc() {
var count = 0;
function innerFunc() {
console.log(count++);
}
return innerFunc;
}
var func1 = outerFunc()
var func2 = outerFunc()
func1() // 1
func1() // 2
func2() // 1
func2() // 2
我们可以看到func1
、func2
都是相当于外部函数outerFunc()
执行,外部函数每执行一次就会开辟一块内存,并且新建一个指针指向这个内存。所以func1()
执行的时候改变的就是对应内存里的count
。这就理解了为什么闭包是返回同一地址的父级函数中对应变量最终的值。
// 继续更新例子和题目