# JavaScript Language Prompt Snippet ## Key Concepts - **Closures**: Functions that capture variables from their enclosing lexical scope - **Prototypes**: Prototype chain-based inheritance underlying all JavaScript objects - **Promises**: Asynchronous value containers enabling `.then()` chaining and `async/await` - **Event Loop**: Single-threaded concurrency model with microtask and macrotask queues - **Destructuring**: Extract values from objects and arrays into distinct variables - **Spread/Rest Operators**: `...` for expanding iterables or collecting remaining arguments - **Proxies**: Meta-programming construct to intercept and customize object operations - **Generators**: Functions using `function*` and `yield` for lazy iteration - **Symbol**: Unique, immutable primitive used for non-string property keys - **WeakMap/WeakSet**: Collections with weakly-held keys allowing garbage collection - **Modules (ESM vs CJS)**: ES Modules use `import/export`; CommonJS uses `require/module.exports` ## Import Patterns - `import { X } from 'module'` — ESM named import - `const X = require('module')` — CommonJS require - `import('module')` — dynamic import returning a Promise (code splitting) - `export default X` / `export { X }` — ESM export forms ## File Patterns - `index.js` — barrel file or directory entry point - `.mjs` — explicitly ES Module files - `.cjs` — explicitly CommonJS files - `package.json` `"type"` field — sets default module system (`"module"` or `"commonjs"`) ## Common Frameworks - **React** — Declarative UI with virtual DOM and component model - **Vue** — Progressive framework with reactivity system and single-file components - **Express** — Minimal and flexible Node.js web application framework - **Next.js** — React framework for production with hybrid rendering - **Svelte** — Compile-time framework that shifts work from runtime to build step ## Example Language Notes > Closure captures outer `config` variable, providing encapsulated state without class > overhead. The returned object's methods share access to the same `config` reference, > forming a module pattern that was standard before ES Modules. > > When encountering `.mjs` vs `.cjs` extensions, the module system is determined by > extension regardless of the `package.json` type field — useful in mixed codebases.