javascript变量在函数内丢失

标签 javascript google-maps google-maps-api-3

我正在我的谷歌地图代码中处理这个问题,但这实际上是一个架构问题。在某些时候,由于太多的请求,谷歌地图限制了响应,此时我想延迟发出另一个请求,但是当我再次调用 function2 时,它 说“数组未定义”。

function1() {
    var array = JSON.parse(xmlhttp.responseText);

    for (i; i < length; < i++) {
        function2(array[i].one, array[i].two);
    }

    function3() {
        //render directions
    }

    function2(start, end) {
        directionsService.route({
            origin: start,
            destination: end,
        },

        function (result, status) {
            if (status == google.maps.DirectionsStatus.OK)
                function3(result);
            else if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT)
                var functionStr = "function2(array[i].one" + ',' + "array[i].two)";
            setTimeout(functionStr, 5000);
        });
    }

}

最佳答案

这是因为当您将一串代码与 setTimeout() 一起使用时,它会在全局范围内执行,而全局范围不知道数组。全局作用域也不知道i;即使确实如此,i 的值也已经不再有效。

如果将函数代码包装在匿名函数中,它应该可以工作,如下所示:

setTimeout(function() {
    function2(start, end);
}, 5000);

请注意,您可以在此处简单地重复使用 startend,因为这些值已受到保护,不会在 i 变量中发生更改。

顺便说一句,您可以考虑序列化您的所有 Google 请求,即一个接一个的请求,以防止出现这些费率问题。

关于javascript变量在函数内丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15634995/

相关文章:

javascript - jQuery 比较 3 个元素并添加最大的大小

javascript - jqGrid 中的自定义聚合/分组

google-maps - 从嵌入的谷歌地图中抓取数据

javascript - 谷歌地图 API : multiple direction/route on same map

javascript - Google Maps API v3 在 iPad Safari 上禁用双指缩放

google-maps - Google map v3 - 如何设置 "baloon"的样式并为国家着色?

javascript - requestAnimationFrame 在被函数调用之前运行

javascript - 使用tinymce在webkit中未触发图像的dragend事件

android - 理解 boundCenterBottom()

android - 在循环执行中提供延迟