Event loop: microtasks and macrotasks It lets JavaScript handle async tasks by queuing callbacks and running them one by one after the main code finishes keeping apps fast and responsive.