2013-08-27 20 views
5

Come maianonima javascript funzione di chiamata! Funzione vs funzione

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

produce SyntaxError: Unexpected token (

mentre

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

avvisi "Test123"

?

+4

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

+0

@zerkms Probabilmente dovresti postarlo come una risposta, poiché in realtà spiega abbastanza bene il nocciolo della questione. – Kippie

+1

c'mon, c'è _has_ per essere un duplicato ... –

risposta

3

È perché aggiungendo il segno ! si converte la dichiarazione in un'espressione e la si invoca immediatamente. Con allegando la funzione tra parentesi si farà primo esempio di lavoro senza errori:

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

per renderlo più chiaro si può pensare prima espressione come qualcosa di simile:

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


E come @zerkms notato che c'è una spiegazione completa di Immediately-invoking functions.

+0

too bad Non riesco a scrivere una risposta corretta, ma ... "identificatore" non è il termine corretto. Piuttosto, la distinzione è tra una definizione e un'espressione. Il primo non può essere invocato immediatamente. –

+1

Giusta traccia ma spiegazione errata. Il ! converte la dichiarazione in un'espressione. – slebetman

+0

Posso definire una funzione e _non_ invocarla: '! Function() {alert (" non verrà chiamato ")}' –

Problemi correlati