首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

javascript 运用对象最之前的操作结果记忆

2012-08-10 
javascript 使用对象最之前的操作结果记忆本文关于javascript的内容部分借用《javascript语言精粹》这本书!/

javascript 使用对象最之前的操作结果记忆
本文关于javascript的内容部分借用《javascript语言精粹》这本书!

//函数可以用对象去记住之前操作的结果,从而能避免无所谓的运算,这种优化叫做记忆//使用递归函数计算fibonacci数列 斐波纳数列var fibonacci = function(n){return n<2 ? n : fibonacci(n-1) + fibonacci(n-2);}for(var i=0; i<=10; i+=1){//console.log('//'+i+':'+fibonacci(i));}//存贮结果可以隐藏在闭包忠。当我们函数被调用是,首先检测存贮结果 如果已经存在立即返回var _fibonacci = function(){var memo = [0,1];var fib  = function(n){var result = memo[n];if( typeof result !==  'number'){result = fib(n-1) + fib(n-2);memo[n] = result;};return result;}return fib;}();var a = _fibonacci;for(var i=0; i<=10; i+=1){console.log('//'+i+':'+a(i));}//我们把这种形式一般化, 编写一个函数帮主我们构造带记忆功能的函数var memoizer = function(memo, fundamental){var shell = function(n){var result = memo[n];if(typeof result !== 'number'){result = fundamental(shell, n);memo[n] = result;}console.log(memo);return result;}return shell;};var fibon = memoizer( [0,1] , function(shell, n){return shell(n-1) + shell(n-2);})var factoial = memoizer([1,1], function(shell,n){return n * shell(n-1);})console.log(factoial(5));

热点排行