在Javascript中将函数作为参数传递时出现问题

在Javascript中将函数作为参数传递时出现问题,javascript,google-maps,Javascript,Google Maps,它表示未找到3。请帮忙 有人能帮我解决这个问题吗 函数makeof函数(数组,thiscont){ 返回函数(点){ 如果(!点){ 警报(数组[thisCount]+“未找到”); } alert(address_array.length + " not found"); else{ var标记=新的GMarker(点); 添加覆盖图(标记); addListener(标记“单击”,函数(){ marker.openInfoWindowHtml(数组[thisCount]+“”); });

它表示未找到
3
。请帮忙

有人能帮我解决这个问题吗

函数makeof函数(数组,thiscont){ 返回函数(点){ 如果(!点){ 警报(数组[thisCount]+“未找到”); }

alert(address_array.length + " not found"); 
else{
var标记=新的GMarker(点);
添加覆盖图(标记);
addListener(标记“单击”,函数(){
marker.openInfoWindowHtml(数组[thisCount]+“”);
});
}
};
}

警报(数组[thisCount]+“未找到”);工作正常,但进入else部分时似乎不起作用。.marker.openInfoWindowHtml(数组[thisCount]+“”)

发生这种情况是因为您的函数是
count
变量的闭包,闭包得到的是对该变量的持久引用,而不是定义函数时该变量值的副本。因此,函数的所有副本在循环结束时都会看到
count
,这超出了数组的范围——因此
未定义

您要做的是创建函数,使其关闭不变的对象

          else {
              var marker = new GMarker(point);
              map.addOverlay(marker);
              GEvent.addListener(marker, "click", function () {
                  marker.openInfoWindowHtml(array[thisCount] + "</b>");
              });
          }
      };
  }
var address_array=final.split('~');
对于(var count=0;count
我们将循环每次迭代时的数组引用和
count
值传递到
makeTheFunction
,该函数将函数创建为其参数的闭包,并返回该函数。现在,函数将显示正确的信息,因为它关闭的信息不会更改。请注意,如前所述,
makeTheFunction
可以位于任何其他函数之外,以避免闭包覆盖任何其他函数

有关闭包的详细信息:

请尝试:

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");
        }
    };
}
函数初始化(最终){
/* ........ */
var address_array=final.split('~');
对于(var count=0;count
ya,即使在我编写alert(count+“not found”)时,它也会显示3个not found。如何解决这个问题???@Anargha:我已经包含了一个示例方法。我猜我是在您看到答案后添加的。:-)ya。我看到了你的答案,但我无法理解到底哪里出了问题。有第二部分,其他部分。还有,我无法访问数组[thiscount]!!!else{var marker=new GMarker(point);map.addOverlay(marker);GEvent.addListener(marker,“click”,函数(){marker.openInfoWindowHtml(value+“”);})@Anargha:关于第二部分,您只需执行与我在上面所做的相同的操作:创建一个函数,该函数将创建您将提供给
addEventListener
的实际函数。我想如果你通读上面链接的文章,事情会更清楚。这里有第二部分,其他部分。还有,我无法访问该值!!!else{var marker=new GMarker(point);map.addOverlay(marker);GEvent.addListener(marker,“click”,函数(){marker.openInfoWindowHtml(value+“”);})
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");
        }
    };
}
function initialize(final) {
        /* ........ */
        var address_array = final.split('~');

        for (var count = 0; count < address_array.length; count++) 
        {
            doGeocode(address_array[count]);
        }
}

function doGeocode(value){
    if (geocoder) {
        geocoder.getLatLng(
        value,
        function (point) {
            if (!point) {
                alert(value + " not found");
            }
        }
     }
}