本博文源于JS基础,闭包现象可谓是JS特有的概念,如何理解闭包现象或者说什么时候用闭包这类问题对初学者来说特别棘手。本次博文就旨在讨论如何使用JS的闭包写程序,或者说透过博文看到闭包它想说啥?
“闭包”现象
这句话很苦涩说的是:函数能够记忆住自己定义所处的作用域,即使函数不在此作用域运行,依然可以访问此作用域中的变量。
小白:这句话都是中文字我能看懂,他说了啥就懵了?
经典例子
<script>
function fun() {
var a = 10;
function inner() {
console.log(a);
}
return inner;
}
var inn = fun();
inn();
</script>
代码很短,特别短。我们从var开始读程序,创建一个变量接受函数表达式,这个fun()函数它的返回值是他的内部函数。然后调用变量,发现它没有报错,竟然完整的10打印出来,太不可思议了!
小白:看不懂,这又怎样?
非常有趣的现象出来了,因为inn函数执行的位置已经不是fun函数内部了,它运行的时候还能访问a的值。这就是闭包现象。这也就解释了,函数记忆住自己定义域(fun内部是它的定义域),a是他可以访问的值。
小白:哦哦哦,用途呢?
“闭包”用途
如果调用外部函数里的内部函数,直接将外部函数返回值设置为内部函数,程序就可以轻松访问内部函数,而且还是正确的访问哦!
那就以一个简单的小程序加深理解吧:
function outer(x) {
function inner(y) {
console.log(x+y);
}
return inner;
}
var inn = outer(3);
inn(5);
inn(7);
大家看完这个程序后,再从头把博文捋一遍,就会发现,传说中的口诀:程序调用外部函数中的内部函数,只需把外部函数的返回值设为内部函数,程序即可访问内部函数!