• 3.使用闭包实现数据缓存


    闭包:

      闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。在PHP、Scala、Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby、 Python、Go、Lua、objective c、swift 以及Java(Java8及以上)等语言中都能找到对闭包不同程度的支持。

     说了一大堆废话,唉,那么简单来说,闭包就是函数以及函数所处的环境的一个集合体;闭包是一个受保护的空间

    今天,主要来简单介绍闭包的一个作用:数据缓存

      我们知道当今的社会是信息化的社会,每时每刻都会产生数以万计的数据,我们需要通过一定的手段对数据进行分析和处理,那么处理速度就尤其的重要了,在我们javascript中,可以利用闭包实现数据的缓存。提高用户的访问流畅性。

    通过处理斐波那契数列Fibonacci sequence),我们可以很明显的体会到数据缓存的优势。

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Document</title>
     6 </head>
     7 <body>
     8     <script type="text/javascript">
     9     //声明一个全局变量用来保存计算次数
    10     var count = 0;
    11         function fun(num){
    12             count++;
    13             //临界条件
    14             if(num == 0 || num == 1){
    15                 return 1;
    16             }
    17             return fun(num-1)+fun(num-2);
    18         }
    19         fun(20);
    20         console.log(count);
    21     </script>
    22     <script>
    23         var count = 0;
    24         var fun = (function(){
    25             var cache = [];
    26             return function(num){
    27                 count++;
    28                 //临界值
    29                 if(num == 0 || num == 1){
    30                     cache[num] = 1;
    31                     return 1;
    32                 }
    33                 //如果缓存数据中存在,直接调用
    34                 if(cache[num]){
    35                     return cache[num];
    36                 }
    37                 //不存在直接计算
    38                 else{
    39                     cache[num] = fun(num-1)+fun(num-2);
    40                     return cache[num];
    41                 }
    42             };
    43         })();
    44         fun(20);
    45         console.log(count);
    46     </script>
    47 </body>
    48 </html>

    计算结果表明,没有数据缓存的结果是:21891,而利用数据缓存的结果是:39。

  • 相关阅读:
    toString()和toLocaleString()有什么区别
    解决浏览器跨域问题
    JavaScript排序,不只是冒泡
    input disabled的情况下在IOS设备中怎么修改颜色
    jquery api 中文文档
    javascript中var that=this的意思
    JS中(function(){xxx})(); 这种写法的意思
    http-equiv 的使用
    $(function(){......})的意思
    js中(function(){…})()立即执行函数写法理解
  • 原文地址:https://www.cnblogs.com/rained/p/6385641.html
Copyright © 2020-2023  润新知