Understanding Synchronous vs Asynchronous JavaScript by Steve Griffith