molily: Stilkritik

Beitrag lesen

Expression Statements sollten wie alle Statements mit einem Semikolon abgeschlossen werden. Eine darin vorkommende Function Expression macht da keinen Unterschied, vielmehr ist das Semikolon noch wichtiger, um es von einer Function Declaration zu unterscheiden (Stichwort Hoisting).

ein link zum artikel? ich weiss ncith mal was expressions statements sind

http://aktuell.de.selfhtml.org/weblog/javascript-syntax

Expression (Ausdruck):
i + 1

Expressions kommen nahezu überall in der Sprache vor. Sie bestehen meist aus Identifiers (Bezeichnern) wie »i«, Literalen wie »1« und Operanden wie »+«.

Expression Statement (Anweisung, die aus einem Ausdruck besteht):

i + 1;  
i = 1;

Function Expression (Funktionsausdruck):
function () {}
Es gibt aber auch Named Function Expressions (benannte Funktionsausdrücke):
function foo () {}

Ein Funktionsausdruck macht nichts anderes als eine Funktion (ein Funktionsobjekt) zu erzeugen und (als Wert) zu ergeben. Man muss also irgendetwas damit machen, um die erzeugte Funktion zu nutzen. Beispielsweise sie in einer Variable oder Objekteigenschaft speichern.
Über den Namen kann der Code der Funktion auf die Funktion selbst zugreifen.

Function Declaration (Funktionsdeklaration):
function foo () {}

Eine Funktionsdeklaration erzeugt ein Funktionsobjekt und speichert e im aktuellen Scope in eine Variable mit dem angegebenen Namen.

Funktionsausdruck und Funktionsdeklaration können also identisch aussehen. Welche Funktionen welche sind, hängt vom Kontext ab, in dem man function foo )( {} notiert: Es ist ein Funktionsausdruck, wenn die Funktion innerhalb eines Ausdrucks notiert wird. Es ist eine Funktionsdeklaration, wenn sie als eigenständiges Statement notiert wird (und zwingend einen Namen besitzt).

Beispiel (benannter) Funktionsausdruck:
element.onclick = function foo () {};

Da die ganze Zeile ein Expression Statement ist, sollte es mit einem Semikolon abgeschlossen werden.

Beispiel Funktionsdeklaration:
function foo () {}

Hier wäre ein Semikolon nicht angebracht.

Eine Funktionsdeklaration ist vom Effekt her vergleichbar mit folgender Variablendeklaration samt Funktionsausdruck:

var foo = function () {};

Allerdings unterliegen Funktionsdeklarationen einem Hoisting (Hochziehen) an den Anfang eines Ausführungskontextes, sodass man notieren kann:

foo();  
function foo () {}

Variablendeklarationen unterliegen zwar ebenfalls einem Hoisting. Sie werden aber nur deklariert und haben dann den Wert undefined. Der Zuweisungspart wird erst ausgeführt, wenn der Interpreter diese Zeile abarbeitet.

Mathias