Функция first () выполняется перед second (), но предупреждение генерируется после выполнения обоих, потому что вы инкапсулировали оба в метод обратного вызова. И предупреждение генерируется после завершения всей функции. Может быть, вы должны написать свой код следующим образом, чтобы понять, что происходит.
function base(src, cb) {
//setTimeout(() => {
cb();
alert(src + ' finished executing')
//}, 100)
}
function first() {
setTimeout(() => {
alert('first');
}, 110)
}
function second() {
setTimeout(() => {
alert('second');
}, 110);
}
base('script 1 and script 2', () => {
base('script 1', () => {
first();
});
base('script 2', () => {
second();
});
})