Voglio emulare il cursore di scrittura che lampeggia per un po' e poi scrive del testo, come se stesse scrivendo dal vivo...
Questo è il codice:

codice:
function caretWrite(repeat,tempo,step){
   console.log('1');
step+=1;
clearTimeout(timer);

if (step < repeat) {

      var val=$('#saluto').html()=='' ? "|" : '';
$('#saluto').html(val);

timer=setTimeout(caretWrite(repeat,tempo,step),tempo);


}

}

function scrivi(){

   var text="Hi";
var id='saluto';
var tempo=1000;
var caretRepeat=6;
var timer;

timer=setTimeout(caretWrite(caretRepeat,tempo,0),tempo);

}

$(document).ready(function(){
   scrivi();
console.log('2');
});
Allora la console mi da errore che non trova timer nella cleartimeout...
Penso sia un errore di scope che si perda la variabile timer anche se gerarchicamente è nella funzione "superiore"...
Pensavo poi che magari il problema fosse la chiamata asincrona del timer che magari quando viene richiamata la funzione carewrite è "già finita" la funziona scrivi() e quindi ha rilasciato la variabile timer, per questo ho messo i log di 1 e 2, in console ho il log di 1 (quindi subito dopo l'errore) e non di 2, quindi penso che alla chiamata del timer sia ancora "attiva" la funzione scrivi()...
Ho un po' di confusione...

Perchè fa così, cosa sto sbagliando (concettualmente)?

Grazie