2013-08-27 19 views
5

Dlaczegoanonimowy wywołanie funkcji javascript! Funkcja vs funkcji

function(){ alert("test123");}() 

produkuje SyntaxError: Unexpected token (

while

!function(){ alert("test123");}() 

powiadomienia "test123"

?

+4

http://benalman.com/news/2010/11/immediately-invoked-function-expression/ – zerkms

+0

@zerkms Prawdopodobnie należy zakładać, że jako odpowiedź, jak to właściwie wyjaśnia istotę rzeczy całkiem dobrze. – Kippie

+1

Dalej, tam _może_ być duplikatem ... –

Odpowiedz

3

To dlatego, że dodając znak !, konwertuj deklarację na wyrażenie i wywołaj ją natychmiast. załączając swoją funkcję w nawiasach zrobisz pierwszy przykład praca bez błędów:

(function(){ alert("test123");})() 

Aby uczynić go bardziej zrozumiałym można myśleć o pierwszej wypowiedzi jako coś w rodzaju:

if (false || !function(){ return false; }()) 


i jako @zerkms zauważono, że istnieje pełne wyjaśnienie dotyczące Immediately-invoking functions.

+0

szkoda, nie mogę napisać prawidłowej odpowiedzi, ale ... "identyfikator" nie jest właściwym terminem. Raczej rozróżnienie to między definicją a wyrażeniem. Ten pierwszy nie może być natychmiast przywołany. –

+1

Właściwy tor, ale błędne wyjaśnienie. The! przekształca deklarację w wyrażenie. – slebetman

+0

Mogę zdefiniować funkcję i _nie_ go wywołać: '! Function() {alert (" nie będzie wywoływana ")}' –

Powiązane problemy