先来看下下面这个例子:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
</body>
<script type="text/javascript">
// function f1(){
// var a=4;
// function f2(){
// alert(a);
// }
// return f2;
// }
// var tp=f1();
// alert(tp);
//在控制台上打印输出0~9
function fn1(){
var arr=[];
for(var i=0;i<10;i++){
arr[i]=function(){
console.log(i);
}
}
return arr;
}
var arrtest=fn1();
for(var j=0;j<10;j++){
arrtest[j]();
}
</script>
</html>
其运行结果并未和我们想象中的一样,这其中就是因为闭包问题。
可以把闭包简单理解成 “定义在一个函数内部的函数”,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。这里不再过多介绍其定义,想深入了解的看这篇博客吧: