2012-12-23 14 views
5

Mögliche Duplizieren:
Difference between (function(){})(); and function(){}();
Are “(function () { }) ()” and “(function () { } ())” functionally equal in JavaScript?JavaScript Selbst Aufruf Funktionen

ich mich nur gefragt, ob es einen Unterschied gibt (in Bezug auf die Funktionalität) zwischen diesen beiden Beispielen:

1st

(function foo() { 
console.log("bar") 
})() 

2.

(function foo() { 
console.log("bar") 
}()) 

Beide scheinen gut zu funktionieren ...

Dank!

+2

Kein Unterschied. – Dogbert

Antwort

4

Sie sind genau das gleiche. Es gibt keinen Unterschied zwischen den beiden in Bezug auf Effizienz, Leistung oder Nutzung. Die Verwendung von beiden ist eine Frage der Präferenz.

Obwohl es eine kürzere Variation der beiden Formen gibt, die von JS minfiers häufig verwendet werden. Das heißt, logische NOT -Ing die Funktion Ausdruck und nannte es:

!function() { 
    console.log(x); 
}();​ 
+0

Okay, danke! :) – LSFR77

10

Kein Unterschied. In der Tat, müssen Sie () nur verwenden, weil schlicht ...

function() { console.log('bar'); }(); 

... nicht richtig von JS-Parser erkannt werden. Wie gesagt in den ES5 standard:

Auch kann ein ExpressionStatement nicht mit der Funktion Schlüsselwort gestartet werden, da, dass es nicht eindeutig mit einem FunctionDeclaration machen könnte.

Die Alternative (zu (...)) Lösung erweitert diese Aussage mit einigen unären Operator. Beide ...

+function() { console.log('bar'); }(); 

... und ...

!function() { console.log('bar'); }(); 

... funktioniert.

+0

Danke für deine Antwort! – LSFR77

2

Es gibt keinen Unterschied zwischen ihnen. Beide sind immediately invoked function expressions. Manche Leute wie Douglas Crockford bevorzugen die second method. Manche bevorzugen das erste. Interessanterweise erlaubt Crockford's JSLint die erste Methode nicht, also nehme ich an, dass die zweite häufiger ist.

Oh, und wenn Sie eine Funktionsdeklaration anstelle eines Funktionsausdrucks verwenden, können Sie die Funktion aufrufen, bevor sie im Programm erscheint.Dies liegt daran, Erklärungen in JavaScript gehisst werden:

greet(); // This will work 

function greet() { 
    alert("Merry Christmas!"); 
} 

Das gleiche gilt für Funktionsausdrücke nicht wahr ist:

greet(); // This will not work 

var greet = function greet() { 
    alert("Merry Christmas!"); 
}; 

Das ist so ziemlich alles, was Sie jetzt wissen müssen.

+0

'Funktion greet()', obwohl gültig, macht keinen Sinn. Nur 'var greet = function()' ist alles was benötigt wird. – ErikE

+0

@ErikE - Macht keinen Sinn wie in? Es macht für mich Sinn. –

+0

Was ist der Sinn eines Namens, der nicht verwendet werden kann? Es macht so viel Sinn wie 'function() {var greet; } 'wenn Greet nie benutzt wird. – ErikE