Hi,
auch so notieren kann:
for (csn in cs) { cs[csn].active && ( cs[csn].bestFix ? cs[csn].bestClick() : cs[csn].sysScan() ) }
>
> Frage an ECMAscript-Kenner:
> Wird damit nicht vielleicht der Garbage-Collector über strapaziert (wenn man ständig so codet), oder ist das legitim, weil ja eigentlich der Interpreter gleich erkennen kann bzw. könnte, was da zu tun ist (nämlich das Ergebnis verwerfen)?
Man kann natürlich so coden, solange es irgendeinen Vorteil bietet. Bei dem obigen Beispiel sehe ich den Nachteil, dass es zu kryptisch ist und man schneller andere Fehler macht.
Bei deinem unteren Beispiel fehlt ein einfaches Semikolon. Das sorgt dafür, dass der Interpreter bei jedem Schleifendurchgang nach einem false oder was auch immer deine Funktionen zurück geben ein Semikolon sucht, aber } findet. Dann muss er das Semikolon selber setzten und kann dann erst den Code ausführen. Dass im Falle von !cs[csn].active ein false; entsteht ist dabei nicht gravierend.
Den größten Fehler machst du schon am Anfang der Schleife. Da vor dem csn kein var steht, durchsucht der Interpreter erst die ganze Scopechain bis zu global nach einer Variablen Namens "csn". Da wahrscheinlich keine gefunden wird, fügt der Interpreter ein var ein und erstellt eine neue Variable. Beim verlassen der Schleife wird dann csn vom GarbeCollector wieder freigegeben.
Ich empfehle dir diese Schreibweise:
~~~javascript
for( var csn in cs){
cs[csn].active&& ( cs[csn].bestFix? cs[csn].bestClick(): cs[csn].sysScan());
}
MfG Hase