self-executing functions

J

j-l-n

Guest
Was ist der Unterschied in der Schreibweise der folgenden zwei - sich selbst aufrufenden - Funktionen?
Code:
(function(value){
  console.log(value);
})(2);

//vs.
(function(value){
  console.log(value);
}(2));
 
du umgehst in beiden fällen ein problem in der js syntax
denn eigentlich sollte
Code:
function(value){
  console.log(value);
}(2);
reichen, geht aber nicht
 
Und es ist völlig egal, ob ich dir erste oder zweite Variante verwende?
 
Und es ist völlig egal, ob ich dir erste oder zweite Variante verwende?
du kannst auch !function(){}() schreiben, das machen viele, weil sie alle js am ende in eins packen und minimieren. hat man dann in der letzten zeile des einen scriptes ein ; vergessen und schreibt in der 1. des nächsten scriptes !function(){}() fällt das mehr auf als (function(value){})(2);
hier genauer
http://forum.jswelt.de/javascript/58613-addieren-eingabe-ausgabe.html#post373618
 
ich finde schon, daß man eine definition gut von einer expression unterscheiden kann, der parser kann es ja auch (sonst würde das function hoisting ja nicht funktionieren).
 
kannst du nicht. weil es dann eine expression ist.
genau, du kannst die function definition function test(){ alert(1); } also nicht von der function expressionfunction test(){ alert(1); } unterscheiden. das ergibt sich erst aus dem context. hast du jetzt noch Reduce/Reduce Conflicts im parser kommt es zu problemen wie hier. eigentlich ist die function expression eine zulässige call expression, der parser geht aber von einer function definition als function declaration statement aus. verpackst du die function expression in eine (sinnlose) primary expression die du in einer call expression verwendest löst du für den parser den konflikt auf.
 
Dieses Problem hast du aber immer, nicht nur bei Funktionen. Und nicht nur in JavaScript.
das führt aber nicht zu problemen, weil die konflikte aufgelöst werden. in diesem fall führt es aber zu problemen, weil (jetzt nochmal)
Code:
function(value){
  console.log(value);
}(2);
auch gehen sollte. es geht aber nicht. und zwar stimmt das ganz und NICHT
stimmt nicht ganz, function definitions sind per se nicht ausführbar, function expressions aber schon.
weil es eine function expression ist.
 
Zuletzt bearbeitet:
Mag mir - auch - bitte kurz jemand erklären, was diese (2) für eine Aufgabe hätte? Das lief mir bislang nie mit Inhalt über den Weg ... vielen Dank.
 
was hat eine call expression damit zu tun? ich kann hier nur auf basis des script-codes argumentieren (wo es eine call expression gar nicht gibt), nicht auf basis des dahinterstehenden Compilers.
 
Zurück
Oben