闭包是函数里面又定义了一个函数,这个函数里面的函数,就是闭包
javascript
function f1()
{
let n=25
function f2() //f2函数是闭包
{
console.log("闭包")
return n
}
//f2函数就是闭包
//如何调用这个闭包
let a=f1() //这时候a的值是f2()函数
a() //a()就是调用闭包函数
闭包的作用就是在函数内外外搭起一个桥梁
还拿上面的例子
javascript
function f1()
{
let n=25
function f2()
{
return n
}
return f2
}
可以看出f1函数里面定义了一个变量n,如果想在函数外面访问它
javascript
let a=f1()
let b=a()
console.log(b) //输出的结果就是f1函数里面n的值
上面的代码中console.log(b)输出的就是f1函数里面定义的n的值
闭包的另外一个作用就是避免局部变量被垃圾回收器回收
先看第一个不用闭包的函数
javascript
function f3()
{
let m=12
console.log(m++)
}
第二个用闭包的函数
javascript
function f4()
{
let n=99
function f5()
{
console.log(n++)
}
return f5
}
第一个个不用闭包的函数,每次执行结果都是12
第二个用闭包的函数,每次执行结果是在99基础上加1,说明变量没有被回收