`
## What Are JavaScript Closures?
A **closure** is a feature in JavaScript where an inner function has access to the outer (enclosing) function’s variables—
a scope chain.
Closures have access to:
- Their own scope (variables defined between their curly brackets)
- The outer function’s variables
- The global variables
## Why Use Closures?
Closures are commonly used for:
- Data encapsulation
- Creating private variables
- Function factories
- Callback functions
## Real-Life Example
\`\`\`js
function greetUser(name) {
return function(message) {
return \`Hello, \${name}! \${message}\`;
};
}
const greetJohn = greetUser("John");
console.log(greetJohn("Welcome to the platform!"));
// Output: Hello, John! Welcome to the platform!
\`\`\`
In the example above, \`greetJohn\` maintains a reference to \`name\` even after \`greetUser\` has executed, forming a closure.
## Advantages
- Preserve state between function calls
- Avoid polluting the global namespace
- Enable currying and partial application
## Things to Keep in Mind
- Overusing closures can lead to memory leaks if not handled carefully.
- Variables in closures are by reference, not by value.
Closures are at the heart of many powerful JavaScript patterns. Understanding them is key to writing clean and modular code.
`