Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript变量在函数中丢失_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

javascript变量在函数中丢失

javascript变量在函数中丢失,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我在谷歌地图代码中处理这个问题,但实际上这是一个架构问题。在某个时候,因为有太多的请求,谷歌地图限制了响应,在这一点上,我想提出另一个延迟请求,但当我再次调用function2时,它会被激活 表示“未定义数组” function1(){ var array=JSON.parse(xmlhttp.responseText); 对于(i;i SETTIMEOUT())/>代码的代码串时,它会在全局范围内执行,这不知道关于“代码>数组< /代码>。全球范围也不知道i;即使是这样,i的值也不再有效 如果

我在谷歌地图代码中处理这个问题,但实际上这是一个架构问题。在某个时候,因为有太多的请求,谷歌地图限制了响应,在这一点上,我想提出另一个延迟请求,但当我再次调用function2时,它会被激活 表示“未定义数组”

function1(){
var array=JSON.parse(xmlhttp.responseText);
对于(i;i
这是因为当您使用带有
setTimeout()
的代码字符串时,它会在全局范围内执行,而全局范围不知道
数组
。全球范围也不知道
i
;即使是这样,
i
的值也不再有效

如果将函数代码包装在匿名函数中,则应该可以使用,如下所示:

setTimeout(function() {
    function2(start, end);
}, 5000);
请注意,您可以在此处简单地重用
start
end
,因为这些值已受到保护,不受
i
变量更改的影响


BTW,您可以考虑将所有的谷歌请求序列化,即一个请求之后的另一个请求以防止这些速率问题。

< P>这是因为当您使用一个带有“代码> SETTIMEOUT())/>代码的代码串时,它会在全局范围内执行,这不知道关于“代码>数组< /代码>。全球范围也不知道
i
;即使是这样,
i
的值也不再有效

如果将函数代码包装在匿名函数中,则应该可以使用,如下所示:

setTimeout(function() {
    function2(start, end);
}, 5000);
请注意,您可以在此处简单地重用
start
end
,因为这些值已受到保护,不受
i
变量更改的影响


BTW,您可以考虑序列化所有的谷歌请求,即一个请求之后的另一个请求以防止这些速率问题。

< P>在SETTIMEOUT中的函数是在不同的范围内执行的,而不是在数组变量的范围内。您可以将其包装在匿名函数中

请看这里:

所以你的代码应该是:

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

请记住,您的代码缺少if-elseif语句的大括号{}。我已经添加了这些。setTimeout中的函数在单独的作用域中执行,而不是在数组变量的作用域中执行。您可以将其包装在匿名函数中

请看这里:

所以你的代码应该是:

   function (result, status) {
            if (status == google.maps.DirectionsStatus.OK) {
                function3(result);
            } else if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
                setTimeout(function () {
                    function2(array[i].one, array[i].two);
                }, 5000);
            }
        });
请记住,您的代码缺少if-elseif语句的大括号{}。我添加了这些