Sinnloses JavaScript?!
B. Peuthert
- javascript
0 Slyh
ich habe all meine html, javascript und php kentnisse gesammelt, in dem ich mir den quelltext von allen möglichen seiten angeschaut habe. als ich wieder mal auf einer meiner lern-touren war bin ich auf folgende zeilen gestoßen, welche mich etwas verwirren. kann mir jemand erklären was hier geschieht?
<head>
...
function test() {
for (var i=0; i<(test.arguments.length - 1); i+=2)
eval(test.arguments[i]+".location='"+test.arguments[i+1]+"'");
document.test_back= false;
}
...
</head>
<body onLoad="test('parent','http://www.domain.de');return document.test_back">
nach meinen kentnissen geschieht folgendes:
kann mir jemand den sinn erklären bzw. sagen weshalb da ein rückgabewert gesetzt wird?
mfg,
bp
mehr javascript gibt es in diesem dokument nicht. es ist eine index.htm ohne frames und es wird keine script-datei eingebunden.
Hallo,
for (var i=0; i<(test.arguments.length - 1); i+=2)
eval(test.arguments[i]+".location='"+test.arguments[i+1]+"'");
- da i mit 0 initialisiert wird, ist die abbruch-bedingung immer erfüllt
- das heisst: alles was er macht ist den rückgabeparamter auf false zu setzen
Nicht ganz. Die Abbruchbedingung ist erst dann erfüllt, wenn i >= test.arguments.length - 1 ist.
Stell dir eine For-Schleife am besten als While-Schleife. Nichts anderes macht der Compiler/
Interpreter nämlich letztendlich daraus.
Aus
for (a; b; c) {
code;
}
wird
a;
while (b) {
code;
c;
}
In diesem Fall wird aus der genannten for-Schleife folgendes:
var i = 0;
while (i < test.arguments.length - 1) {
eval(test.arguments[i]+".location='"+test.arguments[i+1]+"'");
i += 2;
}
Also wird der Code in der While-Schleife so lange ausgeführt, wie i < test.arguments.length -1 ist.
Gruß
Slyh
danke für den hinweis. aber dann muss ich doch nochmal nachhaken.
er führt doch nur einmal die anweisung aus!? warum dann eine schleife? und das eval verstehe ich auch nicht ganz. er setzt doch die neue location von parent? das würde ohne eval doch genau so funktionieren oder?
Moin
er führt doch nur einmal die anweisung aus!? warum dann eine schleife?
Die Schleife sorgt dafür dass der Code weiter ausgeführt wird, wenn mehr als 4 Parameter angegeben werden. Das ist sozusagen die Verallgemeinerung der 2-Frames-gleichzeitig-ändern-Lösung.
test("parent","http://huhu"); sorgt dafür dass http://huhu in das Elternframe geladen wird.
test("top.eins","http://huhu","top.zwei","http://haha"); würde http://huhu in den Frame mit dem Namen "eins" und http://haha in den Frame mit dem Namen "zwei" laden.
und das eval verstehe ich auch nicht ganz. er setzt doch die neue location von parent? das würde ohne eval doch genau so funktionieren oder?
Das ist dafür da, dass die Variante mit "parent" immer funktioniert, was bei der Übergabe der Framenummer und anschließendem Zugriff über top.frames[nummer] nicht gehen würde.
Man könnte natürlich das Frame-objekt direkt als Parameter übergeben, aber mit eval ist das auch nicht falsch.
--
Henryk Plötz
Grüße aus Berlin