Der Grund
function() { return val;}();
nicht der Fall funktioniert, weil es eine Funktion Aussage ist, kein Ausdruck. Es ist ein ziemlich kleiner Unterschied, aber im Grunde, wenn die Anweisung mit function
beginnt, ist es genau wie eine C-Funktionsdeklaration, und Sie können die Funktion nicht aufrufen, weil es keinen Ausdruckswert gibt.
Das Hinzufügen der Klammern macht die Funktionsdefinition Teil eines Ausdrucks, so dass es einen Wert hat und aufgerufen werden kann.
Durch die Zuweisung des Rückgabewerts der Funktion werden auch keine Klammern mehr benötigt, da die Funktionsdefinition nicht die gesamte Anweisung ist. Zum Beispiel dieser Arbeit:
var value = function() { alert("works"); return 0; }();
(function() { alert("works"); })();
aber nicht:
function() { alert("doesn't work"); }();
I sind stets bemüht, die Klammern, auch wenn sie nicht notwendig ist, weil sie es leichter zu sehen, machen, dass ich Aufruf der Funktion, anstatt sie einer Variablen zuzuordnen.
schlagen Sie mich dazu +1 –