簡體   English   中英

Javascript:閉包中的緩存不起作用

[英]Javascript: Caching within Closure doesn't work

我正在嘗試在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

預期:

  • 未定義
  • 名稱:湯姆
  • 數組:[“名稱”,“ tom”],[“測試”,“ 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;
    }())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM