2013-09-30 3 views
1

Ceci est mon code d'origine est un cache à l'aide deferreds/prometerreur instruction JavaScript retour

var templateCache = {}; 

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

Je voulais jquery essayer de le changer en une seule ligne si je l'ai fait

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

Mais Je reçois toujours une erreur indiquant que le côté gauche de la déclaration de retour est invalide

Répondre

3

|| a une priorité supérieure à =. Le code est analysé comme (a || b) = c, ce qui n'a aucun sens.

Vous devez ajouter des parenthèses pour forcer l'affectation à se produire d'abord:

a || (b = c) 
5

Ajouter des parenthèses autour de l'affectation

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

1

ici est une autre façon d'écrire en utilisant un opérateur ternaire.

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