0

GoogleマップAPIのマーカーにリスナーを追加するために配列を使用することについて質問があります。繰り返しを直接使用してリスナーを追加することはできないようですが、関数を呼び出してそれを行うことはできます。インターネットを検索したところ、スコープの問題であることがわかりました。しかし、私は何が理由なのか分かりません。誰でも私に明確な説明を与えることができますか?ありがとう!

works version
function updateM(m) {
google.maps.event.addListener(m, 'click', function() {
  infowindow.open(map,m);
  });
}
for(i=0;i<2;i++)
{
marker[i].setMap(map);
updateM(marker[i]);
}

and 

do not work version
for(var i=0;i<2;i++)
{
marker[i].setMap(map);
google.maps.event.addListener(marker[i], 'click', function() {
  infowindow.open(map,marker[i]);
  });
}


}
4

1 に答える 1

1

JavaScript にはblockスコープはなく、function scope存在するだけです。したがって、addListnersコードを新しい関数でラップすることにより、 の値が"i"意図したとおりに維持されます。

于 2012-11-19T08:16:23.883 に答える