vue.js
源码函数缓存
/**
* Create a cached version of a pure function.
*/
function cached (fn) {
var cache = Object.create(null);
return (function cachedFn (str) {
var hit = cache[str];
return hit || (cache[str] = fn(str))
})
}
/**
* Capitalize a string.
*/
var capitalize = cached(function (str) {
return str.charAt(0).toUpperCase() + str.slice(1)
});
- 函数使用了闭包特性,保存局部变量cache对象
- 函数的
栈环境
运行,LIFO特性是的函数作用域链从内到外依次查找运行 - 通过cached函数运行
return function
变量赋值 - 运行变量函数时利用
栈特性
保存了上级函数的arguments
和cached
变量,检查cached对象属性是否存在(之前是否调用过),已调用即返回,未调用运行函数结果返回
ps:个人觉得这种函数缓存适用于开发者已知函数会调用多次且存在相同情况调用,这种情况下可采用函数缓存优化js