我对闭包的理解
闭包是JS中比较难懂并且比较重要的一个学习模块,闭包是指能够访问另一条作用域中变量的函数。比如如下的闭包的案例:
function f1(){
var a=1;
function f2(){
var b=2;
return b;
}
}
f1();
alert(f2());
在这个例子中,console的结果是f2 is undefined.是因为我们想要调用b的值,b是属于函数f2的内部函数的变量,外部函数是无法访问内部函数的变量的。这个时候我们就要用闭包,形成如下案例:
function f1(){
var a=1;
function f2(){
var b=2;
return b;
}
return f2();
}
var n=f1();
alert(n());
这样就可以成功的将函数f2中变量b的值传递给外部函数。这样工作的原理是将f2的整个函数返回给n然后在alert出函数n。
我这里讲一个故事:已知在厨房里有一锅肉,已知肉不能直接被拿出厨房,那我们该如何将肉拿到餐厅里呢?肉不能被带出餐厅,但是盘子可以,如果我们将肉装进盘子里,就可以连带盘子直接从厨房运送到餐厅,这样的解释大概也就说明了闭包在JS中的作用原理。