在尝试加速递归函数时,我注意到了一些奇怪的事情。当我将用于记忆的对象作为要传递给函数的参数而不是全局变量时,代码执行变得相当慢。
所以代替这个:
var memoizationObj = {};
function factorial(n) {
// factorial code
};
var a = factorial(10);
我将代码更改为:
function factorial(n, memoizationObj) {
// factorial code
};
var b = factorial(10, {});
代码执行速度变慢了 50 倍以上。
为什么会这样?这是带有完整代码的jsperf 。