https://arifm.dev/posts/javascript-execution-model/javascript-execution-model/