No se puede hacer una llamada recursiva en Javascript

Cuando bash ejecutar este progtwig, aparece un error en Firefox que dice que:

moveDate no está definido en la línea 41

(refiriéndose a la línea window.setTimeout("moveDate()",100);

¿Alguna idea de por qué? Pensé que las funciones recursivas podían definirse y luego invocarse a sí mismas.

 function monthScroller(){ document.getElementById("month").style.visibility = "visible"; var x = 0; var y = 0; var dest_x = window.innerWidth/2; var dest_y = window.innerHeight/2; var interval = 1; function moveDate() { if(x<dest_x){ x = x + interval;} if(y<dest_y){ y = y + interval;} document.getElementById("month").style.top = y+"px"; document.getElementById("month").style.left = x+"px"; if ((x+interval < dest_x) && (y+interval < dest_y)) { window.setTimeout("moveDate()",100); } else{ name(); } } moveDate(); } 

Sí lo son. Sin embargo, window.setTimeout("moveDate()",100); evaluará esa cadena de código en el ámbito global; no se encuentra moveDate allí. En su lugar, pase la referencia de la función a setTimout() :

  window.setTimeout(moveDate, 100); 

“moveDate” se encuentra dentro del método monthScroller. Cualquier cosa fuera de los corchetes de la función monthScroller no puede ver la función “moveDate”. Entonces … cuando se ejecuta setTimeout, la “ventana” y la ventana del ámbito no tienen una función llamada “moveDate” en el ámbito. Lo que debe hacer es cambiar la llamada a lo siguiente:

 setTimeout(moveDate,100); 

Eso debería funcionar para ti. De esa manera, está pasando la función / objeto moveDate al setTimeout.