Closer - JavaScript - 閉包
閉包Closer
- 定義
- Closer是一個採用內部函數時也可調用外層作用域變數的方法
- 具有訪問自己的、外部的、全域的變數
- 可以訪問自己及外部傳入的參數
- Closer是一個採用內部函數時也可調用外層作用域變數的方法
- 透過Curry機制的function就是Closer,目的是讓Function獲取擁有記憶,簡化各種運算
- 經典例子Fibonacci數列
const fibonacci = ()=> { let cache = { 0: 0, 1: 1 }; const __fibonacci = (n) =>{ return typeof cache[n] === 'number' ? cache[n] : cache[n] = __fibonacci(n - 1) + __fibonacci(n - 2); }; } var start = new Date(); var s = fibonacci(); var result = s(10); var end = new Date(); console.log('fabonacci(%d) = %d, use time %dms.', 30, result, end.getTime() - start.getTime());
- 最少硬幣找零問題
const minCoinGive = (arr) => { cache = new Object; const totalMoney = (money) => { for (let n of arr) { let add = 0; while (money >= n && money > 0) { money = money - n; cache[n] = add += 1; } } return cache; } } let te = minCoinGive([50, 25, 10, 5, 1]); console.log(te(46))
- 背包問題
- 最常公共子序列
- 矩陣鏈相乘
- 圖形的全點對最短路徑
Published 21 Jun 2017