🔒 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());
print(counter());
print(counter());
let counter2 = createCounter();
print(counter2());
Fabryka funkcji
fn multiplier(factor) {
return fn(x) {
return x * factor;
};
}
let double = multiplier(2);
let triple = multiplier(3);
print(double(5));
print(triple(5));
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);