我正在尝试缓存变量的结果" url"在APP.findUrlParameter()中。第二次执行该函数时,url不应再被定义,但遗憾的是它。
示例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'));
}());
日志:
预期:
答案 0 :(得分:0)
感谢您的回答,当然&#34; url&#34;得到重新宣布,愚蠢的我没有注意到。我可以通过在它周围包裹一个闭包并返回一个这样的函数来解决它:
findUrlParameter: (function () {
var url;
function f(key) {
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;
}
return f;
}())