Javascript:闭包与类存储上下文的利弊

时间:2019-07-08 05:34:38

标签: javascript class closures

在这种情况下,我需要一些状态,并且需要一个可以读取/更新此状态的函数。使用闭包或声明一个类来存储状态的利弊是什么?

这里是生成第n个斐波那契数的示例。变量m是fibInner函数闭包正在使用的状态。

function fib(N) {

    let m = {}

    function fibInner (n) {
        if (m[n]) return m[n]
        if (n === 0) return 0
        if (n === 1) return 1
        m[n] = fib(n-1) + fib(n-2)
        return m[n]
    }

    return fibInner(N)
};

或者,我们也可以声明一个类来存储状态,而不是使用闭包。

function fib(N) {
    return new Fib().solve(N)
};

class Fib {
    constructor(){
        this.m = {}
    }

    solve (n) {
        if (this.m[n]) return this.m[n]
        if (n === 0) return 0
        if (n === 1) return 1
        this.m[n] = this.solve(n-1) + this.solve(n-2)
        return this.m[n]
    }    
}

我要讨论的主要问题是,这些方法在性能(时间和空间),可维护性, 更多/更少容易出错(内存泄漏)?

0 个答案:

没有答案