1. 程式人生 > >js閉包的解決方法

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>