Не совсем понимаю как работают колбэки в JavaScript

Экспериментировал с колбэками, обнаружил следующее в своем коде:

function doSomething(subject, callback) {
    setTimeout(() => {console.log(`Hi, ${subject}`);}, 3000);
    callback();
}
doSomething('John', function() {
    console.log('Finish');
});

Я поставил setTimeout, предположив, что сначала отработаются эти 3 секунды, а потом только выполнится функция calback(). Однако у меня Finish отобразился раньше чем Hi, John. Почему так произошло?

введите сюда описание изображения


Ответы (2 шт):

Автор решения: Алексей Шиманский

Почему так произошло?

Потому что setTimeout асинхронная функция. К колбэкам это не имеет никакого отношения.

Если банально написать вместо таймаута строку console.log(1+2), то вначале она выполнится, а потом колбэк

→ Ссылка
Автор решения: Anastasiia O.

Потому что отложенный коллбак сработает только в случае помещения его в функцию-аргумент setTimeout.

function doSomething(subject, callback) {
  setTimeout(() => {
    console.log(`Hi, ${subject}`);
    callback();
  }, 3000);
}
doSomething("John", function () {
  console.log("Finish");
});
→ Ссылка