Parameterübergabe mit SetTimeout()
Marco
- javascript
0 Ashura
Hallo,
ich habe ein kleines Problem, in der Dokumentation zur setTimeout-Methode, wird die Möglichkeit einer Parameterübergabe mittel Zeichenkettenverknüpfung erwähnt. Ich habe allerdings keine Ahnung wie ich einen Parameter oder eine Variable so an die aufgerufene Funktion übergeben kann, dass sie dort benutzbar ist.
Hallo Marco.
ich habe ein kleines Problem, in der Dokumentation zur setTimeout-Methode, wird die Möglichkeit einer Parameterübergabe mittel Zeichenkettenverknüpfung erwähnt. Ich habe allerdings keine Ahnung wie ich einen Parameter oder eine Variable so an die aufgerufene Funktion übergeben kann, dass sie dort benutzbar ist.
Wie wäre es zum Beispiel folgendermaßen?
var foo = 'Ein kleiner Satz ';
var bar = 'mit einer Ergänzung.';
setTimeout('var a = "' + foo + '"; var b = "' + bar + '"; ausgeben(a, b)', 1000);
function ausgeben(a, b) {
alert(a + b);
}
Wichtig ist, dass die Zeichenkette, die als erster Parameter an setTimeout übergeben wird, interpretiert wiederum gültiges JavaScript ergibt.
setTimeout('var a = ' + foo + '; var b = ' + bar + '; ausgeben(a, b)', 1000);
Dies hier wäre also falsch, da hier die Anführungszeichen um die Werte der Variablen a und b fehlen, das Wort „Ein“ würde also als undeklarierte Variable aufgefasst.
Kürzer und sicher auch flexibler ginge es natürlich auch so:
setTimeout('ausgeben("' + foo + '", "' + bar + '")', 1000);
Einen schönen Freitag noch.
Gruß, Ashura
Hallo,
setTimeout('ausgeben("' + foo + '", "' + bar + '")', 1000);
Hm mir drängt sich ne Frage auf, ... ähm wird nach 1000 Milisekunden da einfach eval(string) aufgerufen?
Grüße
Jeena Paradies
Hallo Jeena.
setTimeout('ausgeben("' + foo + '", "' + bar + '")', 1000);
Hm mir drängt sich ne Frage auf, ... ähm wird nach 1000 Milisekunden da einfach eval(string) aufgerufen?
Das habe ich mich auch gefragt, da es wohl nahe liegt.
Zumindest dürfte der Interpreter hier genau dasselbe machen, wie bei eval.
„Evaluates an expression or calls a function …“
[DevEdge window.setTimeout]
Einen schönen Freitag noch.
Gruß, Ashura
Hallo,
Das habe ich mich auch gefragt, da es wohl nahe liegt.
Zumindest dürfte der Interpreter hier genau dasselbe machen, wie bei eval.
„Evaluates an expression or calls a function …“
[DevEdge window.setTimeout]
Dann könnte man da durchaus auch mit Clousures arbeiten um eval() in einen bestimmten context zu bringen?
Grüße
Jeena Paradies
Hallo,
Zumindest dürfte der Interpreter hier genau dasselbe machen, wie bei eval.
Ja.
„Evaluates an expression or calls a function …“
[DevEdge window.setTimeout]Dann könnte man da durchaus auch mit Clousures arbeiten um eval() in einen bestimmten context zu bringen?
Die Übergabe von Parametern an eine mit setTimeout verzögert aufgerufene Funktion ist ein Fall, bei dem man *immer* eine Closure verwenden sollte. Dann braucht man sich nicht darüber Gedanken machen, wie man irgendwelche Variablen in Strings zusammenbastelt, die dann eval()-artig ausgeführt werden.
/* Funktions-Kontext */
var foo = "a", bar = "b"; // lokale Variablen
window.setTimeout(function () { ausgeben(foo, bar); }, 1000);
Mathias
Die Übergabe von Parametern an eine mit setTimeout verzögert aufgerufene Funktion ist ein Fall, bei dem man *immer* eine Closure verwenden sollte. Dann braucht man sich nicht darüber Gedanken machen, wie man irgendwelche Variablen in Strings zusammenbastelt, die dann eval()-artig ausgeführt werden.
/* Funktions-Kontext */
var foo = "a", bar = "b"; // lokale Variablen
window.setTimeout(function () { ausgeben(foo, bar); }, 1000);
Nur als Ergänzung: das läuft dann aber nur in Browser >IE 4 und >NC 4
Wobei das mittlerweile vernachlässigbar sein dürfte, da diese Browser mit den wenigstens Skripten (und CSS) klar kommen.
Struppi.