概念:
闭包就是能够读取其他函数内部变量得函数。简单的说就是定义在一个函数内部得函数
了解闭包之前,首先需要知道局部变量和全局变量在内存中得存储情况。
- 全局变量:会一直保存在内存中,不会销毁,除非跳转或关闭当前页面。
- 局部变量:函数调用时,写入内存,调用结束后,局部变量会 在内存中销毁。
闭包示例代码如下:
function f1(){
let a = 10;
function f2(){
a++
return a
}
return f2
}
let f3 = f1()
console.log(f3()) // 11
console.log(f3()) // 12
console.log(f3()) // 13
上图代码为闭包结构
为什么每次调用f3() 结果都会 +1 呢? 上面执行结果类似如下:
使a 变量成为了全局变量 所以类似如下效果代码 :
let a = 10;
function f2(){
a++
return a
}
f2() // 11
f2() // 12
f2() // 13
而下方代码 则不同于上面代码:
function fn1(){
let a = 10;
a++
return a
}
fn1() // 11
fn1() // 11
fn1() // 11
a 属于局部变量,函数调用时,写入内存,函数调用完,内存中销毁该局部变量,所以每次调用都相当于从新写入变量,故每次得值都一样,不会累加。
综上所述闭包得优缺点:
优点:避免变量全局污染,
缺点:造成内存溢出,因为除非跳转页面或关掉页面,否则闭包变量内存不会销毁