Ciao a tutti.

Mi sto interessando alle Google Maps (event-closure.htm).

Il codice javascript è il seguente:
Codice PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
>
<
html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
  <
head>
    <
meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <
title>Google Maps JavaScript API ExampleEvent Closures</title>
    <
script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=la vostra key; vedi Google maps Concepts" 
    
type="text/javascript"></script>
    <script type="text/javascript">
function initialize() {
  var message = ["Secret","message:","I","am", "Cicerone80!"];
 
  if (GBrowserIsCompatible()) {//apertura if
    var map = new GMap2(document.getElementById("map_canvas"));
    map.setCenter(new GLatLng(40.6634712,14.7951282), 13);
  
    // Creazione di un marker in un determinato punto
      function createMarker(latlng, number) {
      var marker = new GMarker(latlng);
      marker.value = number;
      GEvent.addListener(marker,"click", function() {
        var myHtml = "[b]#" + number + "[/b]
" + message[number -1];
        map.openInfoWindowHtml(latlng, myHtml);
      });//chiusura function() parametro
      return marker;
    }//chiusura  function createMarker 

    // Add 5 markers to the map at random locations
    // Note that we don't add the secret message to the marker's instance data
    var bounds = map.getBounds();
    var southWest = bounds.getSouthWest();
    var northEast = bounds.getNorthEast();
    var lngSpan = northEast.lng() - southWest.lng();
    var latSpan = northEast.lat() - southWest.lat();
    for (var i = 0; i < 5; i++) {
      var latlng = new GLatLng(southWest.lat() + latSpan * Math.random(),
        southWest.lng() + lngSpan * Math.random());
    map.addOverlay(createMarker(latlng, i + 1));
    }//chiusura ciclo for
  }//chiusura if
}//chiusura function initialize()
    </script>
  </head>
  <body onload="initialize()" onunload="GUnload()">
    <div id="map_canvas" style="width: 500px; height: 300px"></div>
    

[url="index.htm"]Home Page[/url]</p>
   </body>
</html> 
L'esempio originale &egrave; stato leggermente personalizzato rispetto al contenuto del messaggio segreto e rispetto ai valori delle coordinate geografiche del centro della mappa, che sono quelle di un quartiere di Salerno - Italia, anzich&egrave; di Palo Alto - California.

Ma il motivo principale è quello di discutere il meccanismo della closure di questo esempio, perfettamente funzionante (basta procurarsi la key, come descritto in "Google Maps Concepts").
Le closures consentono a funzioni interne di poter accedere a variabili esterne, variabili che non fanno normalmente parte degli oggetti su cui si verificano gli eventi.
La domanda che mi pongo è la seguente: qual'è la funzione interna che accede ad una variabile esterna non facente parte dell'istanza del marker creato? Qual'è precisamente tale variabile esterna?
A parer mio, la funzione interna è la function che compare come terzo parametro di GEvent.addListener(marker,"click", function()
Inoltre, a parer mio, la variabile esterna non facente parte dell'istanza del marker creato è number.
Secondo voi, è esatto?
Inoltre, qualcuno di voi può dirmi, in termini semplici, qualcosa di più su scope e closures?
GRAZIE!

Cicerone80