打开以For-Loop计时的不同页面

时间:2014-05-18 22:03:58

标签: javascript loops for-loop window

我再次提出一个奇怪的问题:)我想写一个for循环,打开具有不同lat和lng值的新窗口。这些是地理坐标。我试过下面的代码。但它不起作用并始终打开openWin(100,20)我不知道我怎么可能找到一个解决方法。因此,每个建议和提议都是受欢迎的。理想情况下,我还要在第二个循环中检查从-180到180的所有lng值。但由于下面的代码不起作用,我没有尝试实现第二个。

function init() {
    var i = 2000;

    for(var lat=-90;lat<=90;lat+=10) {
        var lng = 20; // -180 --> 180
        setTimeout(function(){openWin(lat,lng);}, i);
        i+=2000;
        setTimeout(function(){closeWin();}, i);

    }
}

1 个答案:

答案 0 :(得分:1)

由于您的setTimeout()稍后会运行,lat的值将是for循环结束时的值,而不是您想要的值。

您可以使用IIFE闭包来修复它,该闭包捕获变量的值并保留它以供稍后在setTimeout()中使用:

function init() {
    var i = 2000;

    for(var lat=-90;lat<=90;lat+=10) {
        var lng = 20; // -180 --> 180
        (function(lat, lng) {
            setTimeout(function(){openWin(lat,lng);}, i);
            i+=2000;
            setTimeout(function(){closeWin();}, i);
        })(lat, lng);
    }
}

仅供参考,我们并不清楚您尝试使用i值做什么。我无法告诉您是否需要在闭包内部或外部,或者您希望它何时增加。还不清楚closeWin()如何知道要操作哪个窗口。