Aloha ;)
Mir ist in einem der Beispiele deines Artikels etwas aufgefallen, was auch in anderen Artikeln und auch Antworten hier im Forum immer wieder zu lesen ist, und was mir zumindest in dem Fall, dass es sich bei dem jeweiligen Adressaten um Anfänger handelt, als schlechte Praxis erscheint.
Ich würde das eher nicht als schlechte Praxis einordnen, und ich erklär dir auch warum :)
Bezogen auf dein Codebeispiel hätte diese falsche Annahme zwar keine Auswirkungen, aber ich halte es grundsätzlich für ratsam, sofern diesbezüglich keine zusätzlichen Erklärungen mitgeliefert werden und falls ein entsprechendes Beispiel sich auch an Anfänger richtet, dem Umstand Rechnung zu tragen, dass es in JavaScript für mittels
var
deklarierte Variablen neben dem globalen nur den durch den Ausführungskontext von Funktionen bereitgestellten Geltungsbereich gibt, weshalb ich es besser fände, wenn in Codebeispielen die lokalen Variablen gleich zu Beginn des Funktionskörpers deklariert und Konstrukte wie in deinem Beispiel vermieden würden.
Ich verstehe den Punkt, glaube aber, dass wir eine unterschiedliche Auffassung vom Begriff Anfänger haben.
Wenn wir vom allgemeinen Anfänger sprechen, dann kann ich von gar keinem Vorwissen ausgehen - außer den Grundlagen, die direkt für das Verständnis des Artikels notwendig sind. Da wir über einen Anwendungs- und Praxis-Artikel sprechen, kann ich (auch ohne weitere Erläuterungen) davon ausgehen, dass der Anfänger die Grundlagen von JavaScript, also insbesondere auch, wie var
in JavaScript funktioniert, verstanden hat.
Du schreibst, dass ein Missverständnis auftreten könnte bezüglich des Geltungsbereichs von Variablen. Damit sind wir schon weg vom allgemeinen Anfänger (denn der hätte entweder überhaupt keine Vorstellung von Geltungsbereichen und damit kein Problem oder aber Geltungsbereiche in JavaScript schon verstanden und ergo auch kein Problem) und befinden uns bei einem JavaScript-Anfänger, der schon Ahnung von anderen gängigen Programmiersprachen (Java,C,...) und den dortigen Regeln bezüglich Sichtbarkeit von Variablen hat und gleichzeitig offenbar die Grundlagen von JavaScript nicht gelernt oder zumindest nicht verstanden hat - denn die Deklaration von Variablen und deren resultierende Sichtbarkeit ist Grundlagenwissen.
Und ja, ich gebe dir Recht, in dem Fall könnte es zu einem Missverständnis kommen.
Es gibt für dieses Missverständnis allerdings mMn keine gangbare Lösung - außer den Standpunkt RTFM. Es ist nicht gangbar, zu jedem Beispiel, das außerhalb der Grundlagenkapitel steht, eine Erklärung zu allen verwendeten oder vorkommenden Grundlagen zu schreiben.
Die Alternative, die du vorschlägst (wenn ich dich richtig verstanden habe)
function () {
var i, foo;
if (condition) {
foo = bar;
for (i = 0; i < baz; i++) {
// do something
}
}
}
wäre zwar auch möglich und würde diese Verwechslungsgefahr beheben, ist aber vom reinen JavaScript-Standpunkt aus mMn nicht begründbar.
Ich halte es sogar für Anfänger sogar für mindestens genauso schädlich, weil dadurch das Missverständnis aufkommt, var
in JavaScript sei sowas wie int
in Java, nur ohne Typunterscheidung - die Anfänger, um die es hier geht, werden also nicht zum Nachdenken angeregt, sondern noch eher in ihrem Unverständnis bestätigt. Tatsächlich ist es ja nicht der Sinn von var
eine Variable zu deklarieren (wenn man deklarieren wie in anderen Sprachen versteht), sondern viel eher, sicherzustellen, dass sich die Variable (die gar nicht deklariert werden muss) im aktuellen Kontext befindet. Quasi das Gegenteil eines global
in PHP, nur mit Folgen für den gesamten Kontext.
Das ist doch gerade der Vorteil: Ich muss mich in JavaScript nicht um eine Deklaration kümmern, und wenn ich an einer konkreten Stelle im Code eine "lokale" (soweit das in JavaScript möglich ist) Variable verwenden will, schreibe ich ein var
, damit keine globale Variable herangezogen wird. Das kann ich im Zweifelsfall in jeder Zeile code tun - was mir nicht möglich wäre, wenn var
tatsächlich eine Deklaration wäre.
TL;DR: Dein Vorschlag würde bedeuten var
wie eine Variablendeklaration zu benutzen, was var
nicht ist, und damit eher Unverständnis besiegeln als Missverständnisse beseitigen.
Insbesondere sollte JavaScript mit den einzigartigen Möglichkeiten und Konzepten von JavaScript im Hinterkopf programmiert werden - und nicht mit den Konzepten von Java/C/... im Hinterkopf ;) So hat halt jede Sprache ihre Besonderheiten - und das zu kenntlich zu machen sollte mit ein pädagogisches Ziel sein, nicht es zu verschleiern ;)
Grüße,
RIDER
Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[