javascript变量在函数中丢失
我在谷歌地图代码中处理这个问题,但实际上这是一个架构问题。在某个时候,因为有太多的请求,谷歌地图限制了响应,在这一点上,我想提出另一个延迟请求,但当我再次调用function2时,它会被激活 表示“未定义数组”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的值也不再有效 如果
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语句的大括号{}。我添加了这些