lambda 表达式

function memoize(fun) {
    let memo = new Map();
    return x => {
        if (x in memo) {
            return memo[x];
        }
        let r = fun(x);
        memo[x] = r;
        return r;        
    }
}

function fibonacci(x) {
    return (x <= 1) ? x :
        fibonacci(x - 1) + fibonacci(x - 2);
}

let memFibonacci = memoize(fibonacci)

for (let i in [12]) {
    let start = new Date();
    let f37 = memFibonacci(37);
    let milliseconds = (new Date()) - start;

    console.log(`${i}: f37 is ${f37}`);
    console.log(`${i}: milliseconds is ${milliseconds}`);
}
// prints:
// 1: f37 is 24157817
// 1: milliseconds is 245
// 2: f37 is 24157817
// 2: milliseconds is 0

let start = new Date();
let f38 = memFibonacci(38);
let milliseconds = (new Date()) - start;

console.log(`f38 is ${f38}`);
console.log(`milliseconds is ${milliseconds}`);
// f38 is 39088169
// milliseconds is 357