この答えは初心者から初心者までです;)簡潔さとクロージャの適用に関するベナスタンの答えが好きですが、それでも関数を書くことによってより「基本的な」アプローチを示したいと思います。
クロージャと関数スコープについて話す資格はありませんが、経験から、これらのクロージャ「ラッパー」は、ループ内または他の関数内で呼び出される関数からの予期しない動作を防ぐと言えます。そのようなバグの1つは、ループイテレータ値がすべて同じ値(最後の反復)になるか、未定義になる可能性があります。(私自身の例)
完全なコードへのリンク:http://jsfiddle.net/WaWBw/
地図をクリックしてマーカーを配置し、側面のマーカーまたはリンクをクリックするとズームインします。
function addMarker(pos) {
var marker = new google.maps.Marker({
map: map,
position: pos
});
markers.push(marker);
count = markers.length - 1;
addMarkerListener(marker, count, 6);
makeDiv(count, 4, "Marker #");
count++;
}
function addMarkerListener(marker, index, zoomLevel) {
google.maps.event.addListener(marker, 'click', function(event) {
zoomIn(index, zoomLevel);
});
}
function makeDiv(index, zoomLevel, content) {
document.getElementById("sidebar").innerHTML += '<div onclick="zoomIn(' + index + ',' + zoomLevel + ')">' + content + ' ' + index + '</div>';
}
function zoomIn(index, zoomLevel) {
map.setCenter(markers[index].getPosition());
map.setZoom(zoomLevel);
}