在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");
}
}
}
}