Операции выполняются последовательно.
Некоторые известные программисту выражения могут откладывать асинхронные личинки )
При этом сами выражения выполняются синхронно-последовательно и тут же за ними выполняются следующие строки. Но личинка асинхронности отложена и зреет! )
let $some_elem = $('.some_elem'); // 1
$some_elem.addClass('some_class'); // 2
setTimeout(() => alert("Созрели!"), 1000); // 3 отложили
$('.some_class').remove(); // 4
// этот код выполнился до конца и, казалось бы, делать больше нечего.
// ...через секунду сработал alert
Тут
setTimeout()
отрабатывает мгновенно-синхронно - его функция отложить личинку на через-секунду. Представьте, что setTimeout пушит функцию и её время в некий невидимый служебный массив движка JS. А движок заглядывает в этот массив по 100 раз в секунду, когда свободен, не занят выполнением кода, и смотрит, «есть чё?», что пора выполнить?
Сразу за отработавшим
setTimeout()
(но никакого alert ещё не случилось) выполняется следующая строка
$('.some_class').remove();
Подробнее читайте про
event loop.