Memoization là kỹ thuật cache kết quả của hàm dựa trên input để tránh tính toán lại.
Hiệu quả với pure functions có tính toán nặng hoặc đệ quy như Fibonacci.
javascript
function memoize(fn) {
const cache = new Map();
return function(...args) {
const key = JSON.stringify(args);
if (cache.has(key)) return cache.get(key);
const result = fn.apply(this, args);
cache.set(key, result);
return result;
};
}
const expensiveFib = memoize(function fib(n) {
if (n <= 1) return n;
return expensiveFib(n - 1) + expensiveFib(n - 2);
});
expensiveFib(40); // nhanh — cache hit sau lần đầuLưu ý: JSON.stringify không phù hợp nếu args là object có circular reference.
Memoization caches a function's result based on its input to avoid recomputation.
Effective for pure functions with heavy computation or recursion like Fibonacci.
javascript
function memoize(fn) {
const cache = new Map();
return function(...args) {
const key = JSON.stringify(args);
if (cache.has(key)) return cache.get(key);
const result = fn.apply(this, args);
cache.set(key, result);
return result;
};
}
const expensiveFib = memoize(function fib(n) {
if (n <= 1) return n;
return expensiveFib(n - 1) + expensiveFib(n - 2);
});
expensiveFib(40); // fast — cache hits after first callNote: JSON.stringify is not suitable if args contain circular references.