[latex]Mae govannen![/latex]
Probleme dieser Funktion:
- p ist eine globale Variable und überschreibt Werte von vorhandene Variablen gleichen Namens
Ich dachte Variablen sind nur, wenn sie mit
var
definiert werden global?
Außerhalb eines Funktionskörpers ist es egal, ob ich var a = 3
oder a = 3
schreibe. Es gibt Unterschiede, die aber _rein für die praktische Verwendung_ irrelevant sind. Kann man schön an folgendem Beispiel sehen:
var xx;
function foo() {
xx = 4;
var yy = 6;
}
xx = 2;
yy = 3; // nicht deklariert
console.log(xx, yy); // Ausgabe: 2 3
console.log (window.xx, window.yy) // Ausgabe: 2 3
// Erst in Funktionen gibt es einen Unterschied
foo()
console.log(xx, yy); // Ausgabe: 4 3
console.log (window.xx, window.yy) // Ausgabe: 4 3
In Zukunft wird es möglich sein, auch außerhalb von Funktionen einen eigenen Geltungsbereich festzulegen
- arr.length wird in jedem Schleifendurchlauf neu ermittelt
Was eigentlich nur tragisch ist, wenn das Array sehr viele Elemente hat. Dadurch eingebüßte Performanz sollte doch nicht signifikant sein, oder?
Kommt drauf an. Die meisten heutigen Javascript-Engines der Browser sind i.d.R. sehr schnell, da sollte es wirklich nur etwas ausmachen, wenn die Array-Größe extrem ist. Allerdings sind etwas ältere Engines, insbesondere die des Internet-Exploders in sehr vielen Bereichen langsam bis extrem langsam (ob das für diesen speziellen Fall der Array-Länge gilt, weiß ich nicht, ist mir auch keinen Test wert). Aber weshalb sollte man es darauf ankommen lassen, wenn die Optimierung derart einfach ist? Für alle Fälle, in denen das Array nur durchlaufen und nicht modifiziert wird, setze ich einmalig eine Variable und nutze diese.
- der Vergleichstest ist nicht typgenau. Man fällt auf die Nase, wenn zwischen beispielsweise 4 und '4' unterscheiden werden muß
Das ist mir auch aufgefallen. Allerdings ist das in diesem Fall relativ Wurst, da classList ja in jedem Fall ein Array vom Typ string ist.
Ja. Aber man legt sich eine solche Hilfs-Funktion üblicherweise zu, um sie dann generell projektübergreifend verwenden zu können. Und spätestens dann kann es diese Probleme geben.
Wie genau wäre diese Variable (eigentlich ein Objekt, oder?) zu verwenden? In etwa so?
In Javascript ist alles ein Objekt (außer den „Primitives“ wie Zahlen, Strings, true, false,..) ;)
inArray ist hier genauso ein Funktions-Objekt, wie es auch bei function inArray() {}
eines ist. Insofern ändert sich an der Verwendung absolut nichts.
needle = "test";
haystack = array("foo", "bar", "fuzz", "test");
result = inarray(needle, haystack);
alert(result);
array() gibt es in JS nicht, das war PHP ;)
Stur lächeln und winken, Männer!
Kai
--
Wir sind die Schlumpf. Widerschlumpf ist schlumpflos. Wir werden Sie einschlumpfen.
[SelfHTML-Forum-Stylesheet](http://selfhtml.knrs.de/#h_stylesheet)