molily: functionsaufruf mit setTimeout scheitert

Beitrag lesen

function fadeIn(opacity){

  	setTimeout(fadeIn(opacity),10000)  

setTimeout erwartet eine Referenz auf ein Funktionsobjekt. Was du machst: Du führst fadeIn sofort aus, indem du die Klammern dahinter notierst - das ist nämlich der Funktionsausführungs-Operator.

Das ist dasselbe, als würdest du
setTimeout(window.alert("Hallo!"), 10000);
notieren.
Diese Alert wird natürlich nicht nach 10 Sekunden ausgeführt, sondern sofort, wenn der JavaScript-Interpreter diese Zeile ausführt.

Was schließlich bei setTimeout als erster Parameter ankommt, ist der Rückgabewert des fadeIn-Aufrufes - es gibt keinen.

Was du also tun musst: Eine Funktionsreferenz notieren. Dazu kannst du eine anonyme Funktion verwenden, mit der du den fadeIn-Aufruf kapselst:

setTimeout(function () { fadeIn(opacity); }, 10000);

Die Variable opacity mit dem letzten in fadeIn gesetzten Wert ist darin verfügbar, weil es sich um eine Closure handelt.

Mathias