lambda 表达式

let memoize = 
    (fun: (x: number) => number) => {
        let memo = new Map<numbernumber>()
        return (x: number) => {
            let r = memo.get(x)
            if (r == undefined) {
                r = fun(x)
                memo.set(x, r)
            } 
            return r
        }
    }

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

let memFibonacci = memoize(fibonacci)

for (let i of [12]) {
    let start = new Date()
    let f37 = memFibonacci(37)
    let now = new Date()
    let milliseconds = now.getTime() - start.getTime()

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

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

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