Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di LuckySevenRoX
    Registrato dal
    Sep 2011
    residenza
    Foligno
    Messaggi
    361

    SetInterval non funziona con funzione locale

    salve, ho una struttura di questo tipo:

    codice:
    window.onload = function() {
      function next() {}
      
      function b() {
        setInterval(next(), 1000);
      }
    }
    la funzione next viene svolta 1 sola volta al momento dell'invocazione della funzione "b" e non riesco a capire perchè.. problemi con funzioni locali?



    edit:
    firebug dice

    useless setInterval call (missing quotes around argument?)
    setInterval(next(), '1000');

    e lo fa una volta sola.

    se modifico in setInterval('next()', '1000');
    mi dice che non trova next(), ma ripete il mex d'errore ogni secondo (quindi il timer parte)

    non ci sto capendo niente

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Intanto nn richiami la funzione b(), nell'evento. E la funzione next, cm hai impostato il codice, deve essere all'esterno dell'evento.
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it L'avatar di LuckySevenRoX
    Registrato dal
    Sep 2011
    residenza
    Foligno
    Messaggi
    361
    scusa era sottinteso che la funzione "b" veniva richiamata da qualche parte.. comunque mantenendo next all'interno dell'evento window.onload ho risolto mettendo

    setInterval(function() { next(); }, 1000).. in questo modo funziona.. ma non capisco perchè.. sai spiegarmelo? perchè richiamare next direttamente non funziona? (e invece dentro una function() {} si?)

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    setInterval(next, '1000');

  5. #5
    Ancora meglio senza apici, quindi:

    codice:
    window.onload = function() {
    
      function next() {}
      
      function b() {
        setInterval(next, 1000);
      }
    
    };
    setInterval e setTimeout accettano come primo argomento una funzione. Quando tu scrivi next() con le parentesi in realtà stai invocando la funzione e quindi ciò che passi è il risultato di next (cioè quello che restitusci con un "return").

    Nel tuo caso funziona perché stai passando a setInterval una funzione anonima che, a sua volta, esegue next dopo i millisecondi indicati.

    La soluzione migliore, cmq è quella indicata da vindav perché ti eviti di introdurre una funzione anonima inutile.

    ciao!

  6. #6
    Utente di HTML.it L'avatar di LuckySevenRoX
    Registrato dal
    Sep 2011
    residenza
    Foligno
    Messaggi
    361
    tutto chiaro, grazie

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.