js閉包的解決方法
<!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>