1

这是我的原始代码,它是使用 jquery deferreds/promises 的缓存

var templateCache = {};

var retrieve = function (templateURL) {
    if (!templateCache[templateURL]) {
        templateCache[templateURL] = $.get(templateURL);
    }
    return templateCache[templateURL];
};

我想试着把它改成一个衬里,所以我做了

var templateCache = {};
var retrieve = function( templateURL ){
  return templateCache[ templateURL ] || templateCache[ templateURL ] = $.get( templateURL );
}

但是我不断收到一个错误,即返回语句的左侧无效

4

3 回答 3

5

在作业周围添加一些括号

return templateCache[ templateURL ] || (templateCache[ templateURL ] = $.get( templateURL ));

于 2013-09-30T14:11:41.210 回答
3

||的优先级高于=

您的代码被解析为(a || b) = c,这没有任何意义。

您需要添加括号以强制分配首先发生:

a || (b = c)
于 2013-09-30T14:12:09.277 回答
1

这是另一种使用三元运算符编写它的方法。

var retrieve = function( templateURL ){
    return templateCache[ templateURL ] ? templateCache[ templateURL ] : templateCache[ templateURL ] = $.get( templateURL );
};
于 2013-09-30T18:41:25.190 回答