🔒 Closures

Closure to funkcja która "pamięta" zmienne z zakresu, w którym została utworzona.

Podstawowy przykład

fn createCounter() { let count = 0; return fn() { count = count + 1; return count; }; } let counter = createCounter(); print(counter()); // 1 print(counter()); // 2 print(counter()); // 3 // Nowy counter ma własny stan let counter2 = createCounter(); print(counter2()); // 1

Fabryka funkcji

fn multiplier(factor) { return fn(x) { return x * factor; }; } let double = multiplier(2); let triple = multiplier(3); print(double(5)); // 10 print(triple(5)); // 15

Praktyczne użycie - memoizacja

fn memoize(f) { let cache = {}; return fn(x) { let key = toString(x); if (cache[key] != null) { return cache[key]; } let result = f(x); cache[key] = result; return result; }; } fn slowFib(n) { if (n <= 1) return n; return slowFib(n-1) + slowFib(n-2); } let fastFib = memoize(slowFib);