JavaScript闭包
我们知道,变量分为两种,全局变量和局部变量
- 函数内部可以访问全局变量和局部变量。
- 函数外部只能访问全局变量,不能访问局部变量。
- 当函数执行完毕,本作用域内的局部变量会销毁。
函数内的变量无法被外部访问
请看下面代码
function fn1() {
let a = 10;
}
fn1();
console.log(a)
//打印报错
Uncaught ReferenceError: a is not defined
上方代码中,由于变量 a
是函数内的局部变量,所以外部无法访问。
但是,在有些场景下,我们就是想要在函数外部访问函数内的局部变量,那要怎么办呢?这就需要引入闭包的概念。
闭包理解
让外部可以访问到函数内部的局部变量
function f1() {
var n = 0;
// 此时f2函数就是闭包
function f2() {
return n
}
return f2()
}
let n1 = f1();
console.log(n1)//0
解释:f1是f2的父级,所以f2可以访问f1中的局部变量,然后通过f2,将变量return出来,这样外部就可以访问到f1函数内的局部变量了。