Here is the code which I tried:
// **Creating variables and functions**
let number_object = { num: 0 }
function doHomework(callback) { //Starts doing the homework, supposed to finish after 5 seconds
console.log("writing")
setTimeout(() => {
callback()
}, 5000)
}
function Finished() { //Called when 5 seconds are over
console.log("Finished the homework")
}
function loop_(num_object) {
++num_object.num;
let i = 0;
for (i = 0; i < 3000000000; ++i) { }
console.log(`loop number ${num_object.num} over`)
}
// **Calling functions now**
doHomework(Finished)
let i = 0;
for (i = 0; i < 10000000000; ++i) { } //This takes much more than 5 seconds
console.log(`This took more than 5 seconds, yet "finished" is not going to appear next`)
loop_(number_object)
loop_(number_object)
loop_(number_object)
loop_(number_object)
loop_(number_object)
loop_(number_object)
loop_(number_object)
loop_(number_object)
loop_(number_object)
loop_(number_object)
The output is:
writing
This took more than 5 seconds, yet "finished" is not going to appear next
loop number 1 over
loop number 2 over
loop number 3 over
loop number 4 over
loop number 5 over
loop number 6 over
loop number 7 over
loop number 8 over
loop number 9 over
loop number 10 over
Finished the homework
So I think the output suggests that, the code first queues all the functions in the call stack and then runs them. Which is why all the 10 functions are queued in the call stack, so only after they're done, "finished" appears