[英]Javascript: Caching within Closure doesn't work
I am trying to cache the result of the variable "url" in APP.findUrlParameter(). 我正在尝试在APP.findUrlParameter()中缓存变量“ url”的结果。 When executing the function the 2nd time, url should not be undefined anymore, but unfortunately it is.
第二次执行该函数时,不应再取消定义url了,但是不幸的是。
example url: mypage.com?test=123&name=tom 范例网址: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'));
}());
logs: 日志:
expected: 预期:
Thanks for the answers, of course "url" gets redeclared, stupid me didn't notice. 感谢您的回答,当然重新声明了“ url”,愚蠢的我没有注意到。 I could solve it with wrapping a closure around it and returning a function like this:
我可以通过在其周围包裹一个闭合并返回如下函数来解决它:
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;
}())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.