没有包裹(头)与onLoad

anv*_*nvd 5 javascript dojo loops onload

在这个演示中,我得到了不同的输出,如果我使用(没有换行)或(onLoad).

我的问题是,在html文件中,要获得正确的警报:1,2,3,4代码中需要进行哪些更改?通过简单的dojo加载,我在所有警报中始终为4:

<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.6/dojo/dojo.xd.js"></script>

 <script type="text/javascript">
    var slider = [];

    for (i = 0; i < 4; i++) {

        slider[i] = function () {

            alert([i]);

        };
        dojo.addOnLoad(slider[i]);
    }
    </script>
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 3

您可以使用闭包

var slider = [];

for (i = 1; i < 5; i++) {

    slider[i] = (function (i) {

        return function () { alert([i]); }

    })(i);
    dojo.addOnLoad(slider[i]);
}
Run Code Online (Sandbox Code Playgroud)

这将保存i到另一个保存状态的函数范围中。如果没有闭包,i则作用域为原始函数。