Ну он же учится, так что нормально все :-)
@DivMan, если трудности с пониманием того, в каком порядке должны работать асинхронные callback функции, просто помни, что в JS все работает последовательно. Пока не выполниться текущий код, следующий не начнется. Асинхронные callback функции всегда сработают только после того, как подпрограмма, в которой мы назначаем их, выполнит свой код. В твоем примере, соответственно - пока основная программа не выполнит свой код (куда входит в том числе и проверка на существование класса).
Даже если предположить, что ты со скоростью света кликнешь на кнопке, после того как уже назначен обработчик события, но не остальной код (тут проверка IF), callback все равно будет ждать в очереди. Когда стек вызовов освободиться, туда попадет эта callback функция и будет выполнена (а только здесь мы добавим класс элементу).