2013-09-30 61 views
1

這是我的原代碼,這是使用jQuery deferreds緩存/承諾的Javascript return語句錯誤

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); 
} 

但我一直收到一個錯誤,表示返回語句的左側是無效的

回答

3

||具有比=更高的優先級。

您的代碼被解析爲(a || b) = c,這沒有任何意義。

您需要添加括號強制分配第一發生:

a || (b = c) 
5

在作業周圍添加一些括號

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

1

這裏是另一種方式使用三元運算符寫。

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