最近网上很火的一个面试题,如下
function add (a) {
var b = 3;
return a + 3;
}
修改成当输入 add (2) => 输出5
再次输入 add (2) => 输入出5,但是不经过计算
add(2);
add(2);复制代码
这种题目一拿到就感觉怎么会不经过计算,就得到一个结果呢?
其实这个涉及到设计模式的一个知识点 => 函数式编程 [ Memoization函数缓存 ]
首先来看下修改后的代码吧
function memoization (func) {
//定义一个对象,进行函数缓存
var cache = {};
var key = null;
return function (...args) {
//将传递进来的函数进行序列化,转换成字符串
let _args= JSON.stringify(args);
return cache[_args] || (cache[key] = func.apply(this,args)) }
}
/*
实践,完成上面的功能,实现函数缓存
*/
function add (a) {
var b = 3;
return a + 3;
} //将函数add放入缓冲函数memoization中
let size = memoization (add);
size (1,2);
size (1,2)
看下打印结果
复制代码
结果只打印了一次计算,这样就是实现了函数缓存,下面我们来看下使用的时间
可以看到计算时间第一次计算花费了2毫秒左右,第二次只花了他的1%时间,几乎相当于秒开
了,这样就完成了对一个函数的优化,可能在开发中用到的很少,但是知道也是好的,可能你
以后就是未来的架构哦~