How JavaScript Works Behind the Scenes - Execution Contexts and the Execution Stack