比較少見的例子。
簡述
大部分的閉包都是以「私有 / 公開方法」來舉例。cache 的例子我覺得還蠻少見的,所以特別記一下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| function complex (num) { console.log('Calculating'); return num * num * num; }
function cache (fn) { const ans = {}; return function (num) { if (ans[num]) { return ans[num]; } return ans[num] = fn(num); } } const cacheComplex = cache(complex); console.log(cacheComplex(20)); console.log(cacheComplex(20)); console.log(cacheComplex(20));
|
總之呢,每次執行 cacheComplex
其實就是執行在 cache
裡的那個匿名函式,它會有兩條路:
- 如果閉包裡的
ans[num]
有值就直接回傳
- 如果沒有,就執行閉包裡的
fn
,進行複雜計算
重點在於不管 call 幾次 cacheComplex
它們都能共用同一個 ans
和 fn
的資訊。