Dlaczegoanonimowy wywołanie funkcji javascript! Funkcja vs funkcji
function(){ alert("test123");}()
produkuje SyntaxError: Unexpected token (
while
!function(){ alert("test123");}()
powiadomienia "test123"
?
Dlaczegoanonimowy wywołanie funkcji javascript! Funkcja vs funkcji
function(){ alert("test123");}()
produkuje SyntaxError: Unexpected token (
while
!function(){ alert("test123");}()
powiadomienia "test123"
?
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; }())
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. –
Właściwy tor, ale błędne wyjaśnienie. The! przekształca deklarację w wyrażenie. – slebetman
Mogę zdefiniować funkcję i _nie_ go wywołać: '! Function() {alert (" nie będzie wywoływana ")}' –
http://benalman.com/news/2010/11/immediately-invoked-function-expression/ – zerkms
@zerkms Prawdopodobnie należy zakładać, że jako odpowiedź, jak to właściwie wyjaśnia istotę rzeczy całkiem dobrze. – Kippie
Dalej, tam _może_ być duplikatem ... –