<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>da</title>
</head>
<body>
<script type="text/javascript">
function a(){
var arr=[];
for(var i = 0;i < 10; i++)
{
arr[i] = function b(){
document.write(i);
}
}
return arr;
}
var demo = a();
for(var i = 0; i < 10; i++)
demo[i]();
</script>
</body>
</html>
想要输出0-9
结果输出了十个10
原因:产生了一母十子的闭包,访问的是同一个i,在函数循环内部arr[]只是装入十个,函数function(){},每个函数都形成闭包,在外部执行,i的值最终是10(test已经执行完)
解决方法:需要立即执行函数
<script type="text/javascript">
function a(){
var arr=[];
for(var i = 0;i < 10; i++)
{
(function (j){
arr[j] = function b(){
document.write(j);
}
}(i))
}
return arr;
}
var demo = a();
for(var i = 0; i < 10; i++)
demo[i]();
</script>