What is the difference between async and defer in JavaScript