Axel Richter: setTimeout, Funktions-Parameter verweist auf array

Beitrag lesen

Hallo,

Probiere es so:
idshowit=window.setTimeout(function(){showit(whichrun)},125);
klappt im IE5 aber trotzdem nicht.

Bei mir schon.

var stepshowit = 0;
var a = new Array("a", "b", "c", "d");
showit(a);

function showit(whichrun) {
 var m = whichrun.length;
 if (stepshowit < m) {
  alert(whichrun[stepshowit]);
  stepshowit++;
  //idshowit=window.setTimeout("showit(a)", 125);
  idshowit=window.setTimeout(function () {showit(whichrun);}, 125);
 } else {
  clearTimeout(idshowit);
  stepshowit=0;
 }
}

Der oben stehende Code funktioniert in beiden Variationen.

Zunächst, warum Deine Methode nicht funktionieren konnte:
Mit "showit(" + whichrun + ")" verkettest Du die String-Entsprechung des Arrays whichrun, also "a, b, c, d". Das ergibt: "showit(a, b, c, d)" und die fehlermeldung, dass b nicht definiert ist.

Mit "showit(a)" funktioniert es, weil a eine globale Variable ist.

mir ist nicht klar, wie function()

Mit window.setTimeout("showit(whichrun)", 125) würde es nicht funktionieren, weil die Variable whichrun nach den 125 ms bereits nicht mehr zur Verfügung steht.

Der Aufruf von function definiert eine Funktion ;-). Mit function () wird eine namenlose Funktion definiert. In den geschweiften Klammern danach steht der Funktionskörper, also die Anweisungen, die bei Funktionsaufruf ausgefürt werden.

Mit window.setTimeout(function () {showit(whichrun);}, 125) wird im Speicher eine neue namenlose Funktion abgelegt, welche als einzige Anweisung die Funktion showit mit dem Parameter der hier noch bekannten Variablen whichrun aufruft. Nach den 125 ms wird _diese_ Funktion aufgerufen. Innerhalb _dieser_ ist whichrun bekannt.

viele Grüße

Axel