我的javascript memoization可以更简洁吗?

时间:2013-09-06 08:49:43

标签: javascript memoization idiomatic

我正在尝试将我的javascript中的引用存储到将经常与之交互并使用此代码的页面元素:

var breadcrumbBar = null;
function getBreadcrumbBarElement() {
    if (breadcrumbBar === null) {
        breadcrumbBar = document.getElementById(breadcrumbBarElementId);
    }
    return breadcrumbBar;
}

然而,我想知道我是否可以比这更简洁或惯用(因此更能改善我的javascript ...)?

2 个答案:

答案 0 :(得分:2)

惯用法是使用逻辑or运算符:

var breadcrumbBar = null;
function getBreadcrumbBarElement() {
    return breadcrumbBar || (breadcrumbBar = document.getElementById(breadcrumbBarElementId));
}

或者,为了使它更通用:

var elementCache = {}

function getCached(id) {
    return elementCache[id] || (elementCache[id] = document.getElementById(id));
}

答案 1 :(得分:0)

或者为了将缓存封装到函数中:

function getCached(id) {
  if (!getCached.elementCache) getCached.elementCache = {}; 
  return getCached.elementCache[id] || (getCached.elementCache[id] = document.getElementById(id));
}