KD-one: Verständnisfrage zu Funktion...

Also, vorab, die Funktion, um die es geht, klappt bestens, es geht mir nur darum, die Funktionsweise des Scripts zweifelsfrei zu begreifen.

Hier die Funktion:

function clean()
{
 var i,cnt=clean.arguments;
 for(i=0;i<cnt.length;i++)
 {
   eval("hide_it('divMenu"+cnt[i]+"');");
 }
}

Aufruf geschieht so:

<a href="clean(beliebige Anzahl von Parametern);"...

Nun hab ich es für mich mal auseinanderklamüsert und bin zu folgenden Schlüssen gekommen:

function clean ()
funktions-header mit unbestimmter parameter-anzahl

var i ist klar, hier wird die Variable i nur als solche definiert.

cnt=clean.arguments.
Hier werden die übergebenen Parameter in der Variablen "cnt" gespeichert, richtig?

for( i=0;
Hier wird "i" initialisisert und auf 0 gesetzt, richtig?
i<cnt.length;
Hier wird abgefragt, ob "i" kleiner ist, als die Anzahl der übergebenen Parameter, ok?
i++ )
Wenn die Abfrage true ergibt, wird der Zähler jeweils um eins erhöht, solange i<cnt.length ist, richtig?

jedesmal, wenn die Abfrage true ist, wird der bearbeitete Parameter an diese Funktion eval( "hide_it('divMenu"+cnt[i]+"');" ); übergeben, wobei mir nun etwas nicht klar ist:
in cnt sind ALLE Parameter gespeichert, wird bei +cnt[i]+ aufgrund des beigefügten Zählers immer nur der jeweils bearbeitete Parameter übergeben?

Wenn dann i==cnt.lenght ist, stoppt der Zähler und das Script wird beendet, richtig?

Fragen eines unbedarften Anfängers....

Hintergrund:
Das Script soll prüfen, daß bei einem geöffneten Layer, aufgrund des Timeouts noch andere Layer auf dieser Ebene geöffnet sind(was bei schnellem Überfahren der Menüpunkte sehr leicht passieren kann) und diese gegebenenfalls schließen. Dazu wird bei dem jeweiligen Menüpunkt die Funktion clean(1,3,4,5); z.B. so aufgerufen, bevor der Aufruf des Layers erfolgt.

Gruß

Kurt

  1. Sorry, hab die Grußformel vergessen.
    Da das Board ein nachträgliches Editieren der beiträge nicht erlaubt, sei das hiermit nachgeholt:

    Hi, Cracks! ;-)

    Gruß

    Kurt

  2. Hi,

    in cnt sind ALLE Parameter gespeichert, wird bei +cnt[i]+ aufgrund des beigefügten Zählers immer nur der jeweils bearbeitete Parameter übergeben?

    for() ist eine Schleife. Nehmen wir mal an, dass i = 1 und die
    Anzahl der Parameter fünf ist. Dann werden nacheinander folgende
    Befehle ausgeführt:

    hide_it('divMenu1');
      hide_it('divMenu2');
      hide_it('divMenu3');
      hide_it('divMenu4');
      hide_it('divMenu5');

    Hoffe, geholfen zu haben.

    Bye,
    Peter

    1. Hi,

      in cnt sind ALLE Parameter gespeichert, wird bei +cnt[i]+ aufgrund des beigefügten Zählers immer nur der jeweils bearbeitete Parameter übergeben?

      for() ist eine Schleife. Nehmen wir mal an, dass i = 1 und die
      Anzahl der Parameter fünf ist. Dann werden nacheinander folgende
      Befehle ausgeführt:

      hide_it('divMenu1');
        hide_it('divMenu2');
        hide_it('divMenu3');
        hide_it('divMenu4');
        hide_it('divMenu5');

      Hoffe, geholfen zu haben.

      Bye,
      Peter

      Hallo Peter Thomassen,

      Soweit alles klar, die grundsätzliche Funktion ist mir ja klar. Was mich irgendwie irritierte, war die Tatsache, daß ich am Anfang, ALLE übergebenen Parameter in cnt speichere, beim durchlaufen der Schleife aber immer nur ein Wert übergeben wird. Deshalb auch meine Frage, ob die Übergabe des Wertes vom Stand des Zählers abhängig ist.
      Diw Werte, die übergeben werden, können sehrt stark von dem Wert des Zählers abweichen. Es könnte durchaus der Fall eintreten, daß solche Werte [clean(1,3,5,31,41,42)]übergeben werden. Die Frage zielt eigentlich eher darauf ab, ob mit dem Wert des Zählers der übergebene Wert eingefügt wird. Also z.B.: i=4, dann wird der Wert 31 abgearbeitet. 4 bezieht sich dann auf die Reihenfolge der Werte, oder seh ich da was falsch?
      Da sich aber keine andere logische Erklärung anbietet, wird es wohl so sein, denn funktionieren tut´s.

      Danke für deine Antwort.

      Gruß

      Kurt

      1. Moin!

        Soweit alles klar, die grundsätzliche Funktion ist mir ja klar. Was mich irgendwie irritierte, war die Tatsache, daß ich am Anfang, ALLE übergebenen Parameter in cnt speichere, beim durchlaufen der Schleife aber immer nur ein Wert übergeben wird.

        cnt = count.arguments;

        Mit dieser Funktion wird das _Array_ der Funktionsargumente der Variablen cnt zugewiesen. Ist eigentlich nur, um in der Funktion Schreibarbeit zu sparen.

        Du kannst mit count.arguments[3] auf das _vierte_ Argument der Funktion zugreifen (Zähler beginnt bei Null, und natürlich gehts nur, wenn es mindestens vier Argumente im Funktionsaufruf gibt), und logischerweise mit count.arguments.length die Anzahl der Argumente abfragen (um Zugriff auf Nichtexistentes zu verhindern).

        Durch die Zuweisung oben ist das eben auch mit cnt[3] und cnt.length möglich.

        Und die Schleife fragt nacheinander alle Funktionsargumente ab und macht mit einem einzelnen Argument dann das, was die Schleife vorsieht.

        Diw Werte, die übergeben werden, können sehrt stark von dem Wert des Zählers abweichen. Es könnte durchaus der Fall eintreten, daß solche Werte [clean(1,3,5,31,41,42)]übergeben werden. Die Frage zielt eigentlich eher darauf ab, ob mit dem Wert des Zählers der übergebene Wert eingefügt wird. Also z.B.: i=4, dann wird der Wert 31 abgearbeitet. 4 bezieht sich dann auf die Reihenfolge der Werte, oder seh ich da was falsch?

        Der Zähler zählt nur die Argumente durch, das Argument selbst wird dann zum Verstecken des Layers benutzt.

        - Sven Rautenberg

        1. Hallo Sven,

          Nun hab ich´s glaub ich, kapiert.
          Folglich läuft es so, wie ich es vermutete.

          Danke dir.

          Gruß

          Kurt