C'è un'opzione JSLint , una delle parti buone in effetti, che "[richiede] parentesi intorno a invocazioni immediate", il che significa che la costruzione
(function () {
// ...
})();
dovrebbe invece essere scritto come
(function () {
// ...
}());
La mia domanda è questa: qualcuno può spiegare perché questa seconda forma potrebbe essere considerata migliore? È più resiliente? Meno soggetto a errori? Che vantaggio ha rispetto alla prima forma?
Da quando ho posto questa domanda, ho capito l'importanza di avere una chiara distinzione visiva tra i valori delle funzioni e i valori delle funzioni. Considera il caso in cui il risultato dell'invocazione immediata è il lato destro di un'espressione di assegnazione:
var someVar = (function () {
// ...
}());
Sebbene le parentesi più esterne siano sintatticamente non necessarie, la parentesi di apertura fornisce un'indicazione in primo piano che il valore assegnato non è la funzione stessa ma piuttosto il risultato della funzione invocata.
Questo è simile al consiglio di Crockford in merito alla capitalizzazione delle funzioni del costruttore: è pensato per servire come indizio visivo per chiunque guardi il codice sorgente.