2013-02-22 8 views
7

Mi è stato insegnato che si tratta di una buona pratica di inserire sempre un punto e virgola all'inizio del codice JavaScript, come segue:Punto e virgola JavaScript all'inizio del codice: ancora una buona pratica?

;(function(){ 

})(); 

Tuttavia, molte biblioteche popolari JavaScript/quadri non utilizzare questo, come ad esempio jQuery , Backbone, ecc.

Credo che all'inizio il punto e virgola dovrebbe impedire al codice errato di interrompere il codice minificato/compresso, ecc. Ma ancora, perché nessuno lo sta usando più?

Il punto e virgola all'inizio si è rivelato inutile per qualche motivo?

+5

* Nessuno lo sta più facendo *: Che tipo di prove avete per supportare tale affermazione? –

+2

Se vuoi parlare di "buone pratiche", direi spostare la parentesi di invocazione all'interno della parentesi che contiene la funzione. –

+1

"il punto e virgola prima dell'invocazione della funzione è una rete di sicurezza contro script concatenati e/o altri plugin che potrebbero non essere chiusi correttamente." (http://jqueryboilerplate.com/) È sempre e solo necessario, se si scrive su una pagina in cui vengono caricati/eseguiti anche altri script di terze parti. – marekful

risposta

1

Idealmente la minimizzazione e l'unione di più file non dovrebbe avere alcun effetto sul tuo stile di codifica. Dovresti essere in grado di scrivere il tuo programma come desideri e quindi utilizzare uno strumento automatico per unire e minimizzare correttamente il tuo progetto.

Ci sono molti strumenti automatici che fanno questo. Dai un'occhiata a UglifyJS 2 per esempio. Sono sicuro che sarai in grado di trovare molti altri strumenti simili se ti guardi intorno.

Tornando alla domanda, è importante inserire un punto e virgola dopo un'espressione di funzione immediatamente richiamata come ha sottolineato Daff. Tuttavia non c'è motivo di mettere un punto e virgola prima di esso. Se sei un bravo ragazzo e metti un punto e virgola dopo ogni affermazione ed espressione, non dovresti mai avere problemi.

Non consentire mai a JavaScript di inserire automaticamente il punto e virgola per te.

L'unico posto dove è lecito non mettere un punto e virgola è dopo una dichiarazione di funzione:

function foo() {} // it's alright to not put a semicolon here 

Tuttavia, se si sta utilizzando un'espressione di funzione poi sempre mettere un punto e virgola.

(function foo() {})(); // you should put a semicolon here 

Inserire il punto e virgola da qualsiasi altra parte è solo fonte di confusione. Soprattutto all'inizio di una linea. Le persone di altri background di programmazione potrebbero anche pensare che sia l'inizio di un commento di fine linea.

+2

* "Dovresti essere in grado di scrivere il tuo programma come desideri .. [quindi un po 'di regole che implicano che non dovresti essere in grado di scrivere il tuo programma come desideri] "* Questo è contraddittorio. –

+3

* "Non permettere mai a JavaScript di inserire automaticamente il punto e virgola per te." * [È sciocco.] (Http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding) * "L'unico posto in cui è consentito non inserire un punto e virgola è dopo una dichiarazione di funzione" * Questo è sbagliato. * "Mettere i punti e virgola in qualsiasi altro posto è solo fonte di confusione." * Questa è solo la tua opinione. * "Le persone di altri background di programmazione potrebbero anche pensare che sia l'inizio di un commento di fine linea." * Questo è irrilevante. –

8

La pratica più comune è aggiungere un punto e virgola alla fine del file. Il problema è, quando è concatenare due file come questo:

// file1.js 
(function() { 
})() 

// file2.js 
(function() { 
})() 

senza mettere un punto e virgola alla fine del file1, si tenta di richiamare il valore restituito dalla funzione in file1 con la funzione di file2. Mettere un punto e virgola alla fine di ogni file risolverà questo problema (così come lo metteranno all'inizio).

Un altro modo è quello di trasformare la funzione di chiamata in una dichiarazione come questa:

!function() { 
}(); 

Penso che questo è anche raccomandato da JSLint, perché in questo caso non c'è bisogno di preoccuparsi di punto e virgola (anche se è dovrebbero usarli comunque, ma questa è una discussione completamente diversa;).

+0

hai un esempio di usanza di '! Function() {}();'? Non ho mai visto prima quella sintassi! +1 –

+2

Ben Alman ha scritto un grande articolo su questo: http://benalman.com/news/2010/11/immediately-invoked-function-expression/ – Daff

Problemi correlati