Contact: aviboots(AT)netvision.net.il
41,857 questions
54,547 answers
573 users
function makeAdder(x: number): (y: number) => number { // This inner function forms a closure. // It "remembers" the value of x even after makeAdder returns. return function (y: number): number { return x + y; }; } const add10: (y: number) => number = makeAdder(10); const result: number = add10(20); console.log(result); /* run: 30 */
// Closures capture variables by reference let counter: number = 0; // Closure capturing "counter" const inc: () => void = () => { counter++; }; inc(); inc(); console.log(counter); /* run: 2 */
// Closures inside loops const funcs: Array<() => void> = []; for (let i: number = 0; i < 3; i++) { funcs.push(() => console.log(i)); // each closure gets its own i } funcs[0](); funcs[1](); funcs[2](); /* run: 0 1 2 */
// Closures with arrow functions const factor: number = 3; const multiply: (a: number, b: number) => number = (a: number, b: number): number => (a + b) * factor; console.log(multiply(5, 5)); /* run: 30 */