25.05.2006
Javascript: Loop
Aktuell bin ich ja fleißig in die Programmierung eingestiegen und so manches Problem löst man in dem man durch das Netz surft.
Wie üblich lernt man dabei sehr viel. Z.B. wenn man in der Schleife das Maß für die Anzahl der Schleifen nicht in eine Variable schreibt, wird dieses Maß bei jedem Durchlauf neu gemessen.
Ich war ziemlich erstaunt, dass das Folgende einen Unterschied macht:
for (i = 0, j = objColl.length; i < j; i++)
for (i = 0; i < objColl.length; i++)
Ich hätte nun vermutet, dass objColl.length auch bei der ersten Variante bei jedem Durchlauf der Schleife geprüft wird, steht es doch schließlich in der Klammer in der die Bedingung für den Durchlauf der Schleife abgearbeitet wird und eben nicht vor der Klammer. Ich hätte angenommen, dass es wie folgt aussehen muss:
var j = objColl.length;for (i = 0; i < j; i++)
<Nachtrag> Man beachte die Semikolons. Danke an DonKult in den Kommentaren. </Nachtrag>
for ( i = 0, j = objColl.length; i < j; i++)
for ( Ausgangslage vor der Schleife; PrüfKriterium, das nach jeder Schleife verglichen wird; Vorgang, der nach jeder Schleife ausgeführt wird )
Aber kann ja sein, dass sich Stuart von den Muffin Research Labs hier irrt. Vielleicht kann mich ja noch jemand über meinen Denkfehler aufklären, sollte Stuart mit seinem Statement in dem Beitrag zu getElementbyClassName recht haben. In jedem Fall ist es ein Gedanke Wert, das Maß separat in einer Variable zu deklarieren.
Loops und der Ausstieg aus derselben, sobald klar ist, dass nicht weiter dieser Loop (=Schleife) gebraucht wird, auch denn wenn es zwei Loops sind, soll hier näher erläutert sein. Das schaue ich mir dann bei Gelegenheit an. Das Javascript-Schleifchen war jetzt nicht mein Thema, sondern die Attribute der Nodes an Dialogfenster zu übergeben, die in einem contenteditable vorkommen könnten.
Filed under: Programmierung
4 Comments
May 25th, 2006 at 12:51
> for (i = 0, j = objColl.length; i In jedem Fall ist es ein Gedanke Wert, das Maß separat in einer Variable zu deklarieren.
Das lohnt sich vor allem bei größeren Berechnungen durch Funktionen. Bei JS bin ich mir allerdings nicht sicher, ob die Eigenschaft length nicht schon selbst eine Variable ist und keine Funktion…
May 25th, 2006 at 13:02
o_O Irgendwas hat die Hälfte meines Kommentars gefressen… :/
Also nochmal in „Kurzform“:
JavaScript (wie auch PHP) erlauben es bei der for-Schleife die „Parameter“ die durch Semikola getrennt sind druch keine, einen oder mehrere Ausrücke festzulegen.
Der erste Teil sind die Befehle die vor der Schleife ausgeführt werden, der zweite legt die Bedingungen fest die erfüllt sein müssen um die Schleife weiterlaufen zu lassen und der dritte Teil legt Befehle fest die bei jedem Schleifendurchlauf ausgeführt werden. Nachfolgenden zwei Beispeile geben also das selbe aus:
for(x=0,y=100,alert(”X startet bei “+x+” und y bei “+y);x
May 25th, 2006 at 13:03
Clients können in einer sehr schnellen Umgebung hausen oder in sehr langsamen Kisten ihr Dasein fristen und wofür length auch immer steht, es könnte in sich etwas sein, das erst mühsam ermittelt werden muss. Ich denke das ist der Grundgedanke dahinter, ein Maß überhaupt in eine separate Variable zu schreiben … was length in diesem konkreten Fall bedeutet, weiß ich nicht, so tief stieg ich nicht ein. Ich habe den Artikel von Stuart nicht gelesen, nur überflogen.
May 25th, 2006 at 13:20
Das heißt also, dass 1. und 2. nur einmal angesehen werden eben vor der Schleife? Dann aber ist obj.length bereits ein Wert der nicht erneut geprüft wird. Dann wäre es auch egal direkt obj.lenght zu verwenden und nicht erst die obj.length in eine Variable zu schreiben.
Wird die Bedingung aber bei jedem Durchlauf erneut aufgerufen, ob diese schon ein getreten ist, dann wird bei der Prüfung bezüglich des Eintritts auch geprüft … stopp JETZT hab ich’s.
Das SEMIKOLON steht nach
j=obj.length. Ich weiß, warum ich mit Programmieren so Schwierigkeiten habe. Diese kleinen Satzzeichen bekommen fürchterlich viel Bedeutung — für meinen Geschmack viel zu viel Bedeutung.