J'essaie de mettre en cache le résultat de la variable "url" dans APP.findUrlParameter(). Lors de l'exécution de la fonction la 2ème fois, l'URL ne devrait plus être indéfinie, mais malheureusement elle l'est.Javascript: La mise en cache dans la fermeture ne fonctionne pas
exemple url: mypage.com?test=123 & name = tom
(function() {
var APP = {
urlParameterPairs: function() {
var url;
if (window.location.search) {
url = window.location.search;
url = url.substring(1).split('&');
$.each(url, function (i) {
url[i] = url[i].split('=');
});
}
return url;
},
findUrlParameter: function (key) {
var url; // <---- to be cached !
console.log(url);
return (function() {
var result;
url = url || APP.urlParameterPairs();
$.each(url, function (i) {
var pair = url[i];
if (pair[0] === key) {
result = pair[1];
return false;
}
});
return result;
}());
}
};
console.log('name: ' + APP.findUrlParameter('name'));
console.log('test: ' + APP.findUrlParameter('test'));
}());
journaux:
- non définie
- nom: test de tom
- non définie
- : 123
prévu:
- non définie
- nom: tom
- Tableau: [ "nom", "tom"], [ "test", "123"]
- test: 123
Chaque fois que vous appelez la fonction 'findUrlParameter' vous Réaffectation la variable' url', alors comment pourriez-vous mettre en cache? –
La déclaration de la variable dans la fonction va créer une nouvelle variable à chaque fois que la fonction est évaluée. – Bergi
Merci, vous avez raison, cela n'a pas beaucoup de sens ce que j'essayais. J'utilisais la fermeture d'une mauvaise façon. Je pourrais le réparer maintenant, voir ma réponse. –