Проблема в том, что вы выполняете обратный вызов вне вашей функции setTimeout
. Javascript выполняет код асинхронно, что означает, что он не ждет, пока предыдущий код будет «завершен», прежде чем он перейдет к следующей строке.
Следовательно, когда вы вызываете doHomework
, он запускает таймер и немедленно переходит к следующей строке кода, которая является обратным вызовом.
Затем по истечении 10 мс выполняется код внутри тайм-аута.
Чтобы получить желаемый результат, вам нужно поместить функцию обратного вызова в функцию setTimeout
, например:
function doHomework(subject, callback) {
setTimeout(function () {
console.log(`Starting my ${subject} homework.`);
callback();
}, 10);
}