Ho iniziato da poco a studiare javascript. Non capisco questo codice e volevo discuterlo in modo approfondito.

codice:
function delayTimer(delay){      
     var timer;                 
     return function(fn){       
          timer=clearTimeout(timer);
          if(fn)
               timer=setTimeout(function(){   
                    fn();
               },delay);
          return timer;
         }
    }
Domande:
1) cosa fa e come si usa
2) perché non ha scritto timer=setTimeout("fn();",delay); ?? perché alla setTimeout passa una funzione
anonima che a sua volta esegue fn()?
3) non capisco il senso di fn(). fn e' il parametro passato alla prima funzione anonima. Oggi variabile
e' un oggetto, ma cosa vuol dire fn() ?
4) fn inzialmente e' null? come fa a non essere null??

beh per ora basta cosi'
grazie