Questa caratteristica è banale e abbastanza innocua, ma secondo me tradisce l'origine del linguaggio: in Javascript (come in certe versioni del C mi sembra) si può omettere il ; di fine istruzione tra due istruzioni che stanno su due righe diverse oppure nelle istruzioni a fine programma o comunque seguite da una }
I problemi sono due: certe istruzioni vengono interpretate in modo "poco intuitivo" e inotre si crea una dipendenza tra le diverse istruzioni, nel senso che se aggiungo un'istruzione sotto a quella senza ; devo ricordarmi di correggere anche quella sopra. Ecco un esempio di interpretazione che potrebbe confondere:
var y = x + f
(a+b).toString()
viene interpretata come
var y = x + f(a+b).toString();
A questo punto mi chiedo: non sarebbe meglio rendere obbligatorio il ; a fine istruzione ed avere tanti ragionamenti in meno sia per me che per il parser? Con tutto il codice che scrivo non saranno mica proprio i ; finali a farmi venire l'artrite alle mani ... Mi sembra più una caratteristica messa lì da un programmatore che voleva dimostrare quanto è bravo a fare un parser ...
Vero è che basta non ricordarsi di questa cosa e usare sempre il ; per evitare problemi.