合理的利用js缓存,能有效提升复杂运算效率,此处有两种概念:
1.闭包-(指有权访问另一个函数作用域中的变量的函数)
2.高阶函数-(接受其他函数作为参数或返回其他函数的函数)
此处以斐波那契数列为例,演示了运用缓存与不运用缓存计算的效率差别。
斐波那契数列是一组数字,以1 或 0 开头,后面跟着1,然后根据每个数字等于前两个数字之和规则进行。如
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …]
根据此规律,编写一个函数返回斐波那契数列中的 n 元素,可解:
function fibonacci(n) {
if (n <= 1) {
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2);
};
运用高阶函数缓存改写此方法,可封装函数:
var memoizer = function (fun) {
var cache = {};
return function (n) {
if (cache[n] != undefined) {
return cache[n];
} else {
var result = fun(n);
cache[n] = result;
return result;
}
}
};
var fibonacciUseCache = memoizer(fibonacciMemorizer);
var fibonacciMemorizer = function (n) {
if (n <= 1) {
return 1;
}
return fibonacciUseCache(n - 1) + fibonacciUseCache(n - 2);
}
下面是写给自己看的,此处用jquery拓展封装下,备用:
(function () {
$.extend({
memoizer: function (fun) {
var cache = {};
return function (n) {
if (cache[n] != undefined) {
return cache[n];
} else {
var result = fun(n);
cache[n] = result;
return result;
}
}
}
});
})();
参考文档:
示例:请点这里