La prima cosa che questo codice fa è eseguire questa funzione (grazie allo ()
alla fine del codice che hai postato):
function() {
// SET TIMER
var timer = 0;
// RETURN SET TIMEOUT FUNCTION
return function(callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
}
e memorizzare il risultato in delay
. Quando viene eseguita, questa funzione crea una chiusura con la variabile locale timer
che funge da contatore locale. La funzione restituisce quindi la funzione interna:
function(callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
}
Poiché è in chiusura, questa funzione interno ha accesso alla variabile timer
. Nessun altro codice esterno può accedere a timer
. Questo metodo viene utilizzato per consentire a più timer di essere eseguiti contemporaneamente senza doversi preoccupare di più variabili timer
.
Immaginate in questo modo: delay
ora contiene una funzione (function(callback, ms) {...
) che ha accesso a una variabile locale, timer
. La variabile timer
è invisibile per quanto riguarda qualsiasi codice esterno. Solo la funzione che contiene delay
può accedervi.
Quindi richiamare quella funzione interna chiamando delay(callback, timeout)
.
fonte
2012-04-08 22:39:34
Suggerisco di chiederlo su http://codereview.stackexchange.com/ – Gerep
Dai un'occhiata a ['clearTimeout'] (https://developer.mozilla.org/en/DOM/window.clearTimeout) e [ 'setTimeout'] (https://developer.mozilla.org/en/DOM/window.setTimeout). –
Si potrebbe anche voler guardare la definizione della funzione anonima. Ecco un [collegamento] (http://stackoverflow.com/questions/1140089/how-does-an-anonymous-function-in-javascript-work). – DiamRem