首页 > 代码库 > 3.使用闭包实现数据缓存
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。
3.使用闭包实现数据缓存
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。