在这种情况下,我需要一些状态,并且需要一个可以读取/更新此状态的函数。使用闭包或声明一个类来存储状态的利弊是什么?
这里是生成第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]
}
}
我要讨论的主要问题是,这些方法在性能(时间和空间),可维护性, 更多/更少容易出错(内存泄漏)?