【发布时间】:2017-10-20 11:55:12
【问题描述】:
我正在尝试在 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'));
}());
日志:
- 未定义
- 姓名:汤姆
- 未定义
- 测试:123
预期:
- 未定义
- 姓名:汤姆
- 数组:["name", "tom"],["test", "123"]
- 测试:123
【问题讨论】:
-
每次调用函数
findUrlParameter都是在重新赋值变量url,那怎么缓存呢? -
在函数内部声明变量会在每次计算函数时创建一个新变量。
-
谢谢你,你是对的,这对我的尝试没有多大意义。我以错误的方式使用了闭包。我现在可以修复它,请参阅我的答案。
标签: javascript caching closures memoization