TL;DR
Closures let functions remember variables from their surrounding scope. Promises handle asynchronous operations (things that take time). Async/await is syntactic sugar on top of promises that makes them easier to read. Master these three and you understand how JavaScript actually runs.