简体   繁体   English

Javascript:闭包中的缓存不起作用

[英]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: 日志:

  • undefined 未定义
  • name: tom 名称:汤姆
  • undefined 未定义
  • test: 123 测试:123

expected: 预期:

  • undefined 未定义
  • name: tom 名称:汤姆
  • Array: ["name", "tom"],["test", "123"] 数组:[“名称”,“ tom”],[“测试”,“ 123”]
  • test: 123 测试:123

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM