Jakie są zasady automatycznego wstawiania średnika (ASI) w JavaScript?

Najpierw powinienem chyba zapytać, czy to zależy od przeglądarki. Czytałem, że jeśli zostanie znaleziony niepoprawny token, ale sekcja kodu jest ważna do tego niepoprawnego tokena, średnik jest wstawiany przed tokenem, jeśli poprzedza go podział linii. Jednak częstym przykładem cytowanych błędów...