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
+1

每次调用函数'findUrlParameter'你重新分配变量'url',那么你怎么能缓存呢? –

+0

在函数内部声明变量将在每次函数评估时创建一个新变量。 – Bergi

+0

谢谢,你是对的,那没什么意义,我正在尝试。我以错误的方式使用闭包。我现在可以修复它,看我的答案。 –

感谢您的答案,当然“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; 
    }())