Explain the core concepts of JavaScript, including scope, closures, asynchronous programming, and DOM manipulation.