Part 3: Closures and Currying - Function Factories
Introduction
Understanding Closures
Basic Closure
function createCounter() {
let count = 0; // Private variable
return {
increment: () => ++count,
decrement: () => --count,
getValue: () => count
};
}
const counter = createCounter();
console.log(counter.increment()); // 1
console.log(counter.increment()); // 2
console.log(counter.getValue()); // 2
console.log(counter.decrement()); // 1
// Cannot access count directly
// console.log(counter.count); // undefinedMultiple Closures
Real Example: Configuration Management
Currying
Basic Currying
Currying with Arrow Functions
Partial Application
Real Example: Validation Functions
Real Example: Authorization Middleware
Real Example: Logger Factory
Real Example: Query Builder
Currying Utility
Real Example: API Client Builder
Memoization with Closures
Best Practices
1. Use Closures for Private State
2. Curry for Reusability
3. Partial Application for Configuration
What's Next
PreviousPart 2: Higher-Order Functions and Composition - Building PipelinesNextPart 4: Functional Error Handling - Railway-Oriented Programming
Last updated