Visualizzazione dei risultati da 1 a 10 su 14

Visualizzazione discussione

  1. #8
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    Quote Originariamente inviata da mxa Visualizza il messaggio
    Immagino che il listener sia definito in un ciclo for, quindi ti serve creare una clousure per racchiudere il valore di i, altrimenti il contenuto della info Window sarà sempre quello corrispondente all'ultimo valore di i indipendentemente da che marker cliccki.
    esattamente, infatti facendo alcune prove è proprio così.
    Quello che mi chiedo tuttavia è, questo modo di inizializzare la funzione per generare la clousure
    (function(par) { })(par)

    è stata creata appositamente dagli ingegneri javascript, oppure è un semplice escamotage ricavato su quel già di buono offrono i metodi standard del linguaggio?

    Ho creato un codice più semplice da capire

    Codice PHP:
    <div id="uno">uno</div>
    <
    div id="due">due</div>
    <
    div id="tre">tre</div>

    <
    script>

    function 
    prova(a)
    {
    alert(a)}

    for (var 
    i=1i<4i++)
    {
      if (
    i==1)
      {
         $(
    '#uno').bind("click", function(){prova(i)} ) //restituisce 4 che è il valore che la variabile globale i ha assunto alla fine del ciclo
      
    }
      else if (
    i==2)
      {
          $(
    '#due').bind("click", function(i){return function(){prova(i)}}(i) ) //restituisce correttamente 2 in quanto genero una clousure con la variabile i
      
    }
       else if (
    i==3)
      {
          $(
    '#tre').bind("click", function(i){return function(){prova(i)}}(i) ) //restituisce correttamente 3 in quanto genero una clousure con la variabile i
      
    }
    }

    </script> 
    Ora a ben vedere function(i){return function(){prova(i)}}(i) potrebbe essere visto in questo modo:
    la prima function anonima genera (ritorna) un'ulteriore function anonima, seguita poi da ulteriori parentesi tonde con incluso un argomento.
    ciò che ne risulta a conti fatti è la dichiarazione di una funzione
    function(i) {prova(i)}

    Se così fosse, è appunto questo che intendo per escamtoage
    Ultima modifica di American; 13-11-2013 a 08:32

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.