sco*_*oby 2 javascript google-maps
function initialize(final) {
/* ........ */
var address_array = final.split('~');
for (var count = 0; count < address_array.length; count++)
{
if (geocoder) {
geocoder.getLatLng(
address_array[count],
function (point) {
if (!point) {
alert(address_array[count] + " not found");
}
Run Code Online (Sandbox Code Playgroud)
我想要的只是在这里工作的警报,在最后一行.
假设address_array
有3个值,即为address_array.length
3.但警报始终显示undefined not found
.我假设address_array[count]
无法从此功能访问.但是,当我尝试
alert(address_array.length + " not found");
Run Code Online (Sandbox Code Playgroud)
它说3 not found
.请帮忙.
有人可以帮我解决这个问题吗?
function makeTheFunction(array,thisCount){return function(point){if(!point){alert(array [thisCount] +"not found"); }
else {
var marker = new GMarker(point);
map.addOverlay(marker);
GEvent.addListener(marker, "click", function () {
marker.openInfoWindowHtml(array[thisCount] + "</b>");
});
}
};
}
Run Code Online (Sandbox Code Playgroud)
警报(array [thisCount] +"not found"); 工作正常,但它进入else部分似乎工作..marker.openInfoWindowHtml(array [thisCount] +"");
发生这种情况是因为您的函数是对count
变量的闭包,并且闭包获得对变量的持久引用,而不是在定义函数时的值的副本.所以函数的所有副本都看到count
循环结束时,它超出了数组的范围 - 因此undefined
.
你想要做的是创建一个函数,使它关闭不会改变的东西.
var address_array = final.split('~');
for (var count = 0; count < address_array.length; count++)
{
if (geocoder) {
geocoder.getLatLng(
address_array[count],
makeTheFunction(address_array, count)
);
}
}
function makeTheFunction(array, thisCount)
{
return function(point) {
if (!point) {
alert(array[thisCount] + " not found");
}
};
}
Run Code Online (Sandbox Code Playgroud)
我们传递数组引用和循环的每次迭代时的count
值makeTheFunction
,这将函数作为其参数的闭包创建并返回该函数.现在该函数将显示正确的信息,因为它关闭的信息不会改变.注意,如所写的,makeTheFunction
可以在任何其他函数之外,以避免闭包闭合其他任何东西.