How Javascript Handle Asynchronous Programming