Dlaczego tak
Atrybut defer sprawia, że przeglądarka pobiera skrypt równolegle z analizą HTML, nie wstrzymując renderowania, i wykonuje go dopiero po przetworzeniu całego dokumentu — wtedy elementy strony już istnieją. Typ text/plain powoduje, że skrypt w ogóle się nie wykona. Znacznik link z rel="stylesheet" wczytuje arkusze CSS, a nie JavaScript, a charset nie zmienia momentu wykonania.