Javascript:关闭内缓存不起作用
问题描述:
我想缓存APP.findUrlParameter()中变量“url”的结果。当第二次执行该函数时,url不应该被定义,但不幸的是。Javascript:关闭内缓存不起作用
例如URL:mypage.com?test=123 &名称=汤姆
(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'));
}());
日志:
- 未定义
- 名:汤姆
- 未定义
- 试验:123
预期:
- 未定义
- 名:汤姆
- 阵列:[ “名称”, “汤姆”],[ “测试”, “123”]
- 测试:123
答
感谢您的答案,当然“url”得到重新宣布,愚蠢的我没有注意到。我可以包装它周围的关闭和恢复这样的功能解决这个问题:
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;
}())
每次调用函数'findUrlParameter'你重新分配变量'url',那么你怎么能缓存呢? –
在函数内部声明变量将在每次函数评估时创建一个新变量。 – Bergi
谢谢,你是对的,那没什么意义,我正在尝试。我以错误的方式使用闭包。我现在可以修复它,看我的答案。 –