返回顶部
首页 > 资讯 > 精选 >怎么使用备忘录来改进Javascript函数
  • 489
分享到

怎么使用备忘录来改进Javascript函数

2023-06-29 22:06:32 489人浏览 薄情痞子
摘要

本篇内容主要讲解“怎么使用备忘录来改进javascript函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用备忘录来改进Javascript函数”吧!什么是备忘录?备忘录是缓存的一种形式

本篇内容主要讲解“怎么使用备忘录来改进javascript函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用备忘录来改进Javascript函数”吧!

    什么是备忘录?

    备忘录是缓存的一种形式,是一种方便进入和后续使用的值存储方法。备忘录是将已解决问题的结果记录下来,这样下次需要再次执行相同操作时,就不必重新计算了。不过,一个函数要使用备忘录,需要满足一定条件:它必须是引用透明的,即只有在调用函数的效果与用函数的返回值替换函数调用的效果完全相同的情况下才可以使用。

    在Ruby、c++python等大多数编程语言中都有备忘录,这些语言中甚至有很多库可以简化。在本文中,我们将重点关注Javascript。编程语言或许不同,但其中的概念和思想是一致的。

    备忘录的概念

    备忘录需要理解以下两个概念:

    1.引用透明

    如果一个表达式可以在不改变程序行为的情况下被其对应的值替换(反之亦然),那么它就被称为引用透明。这要求表达式必须是纯的,即对于相同的输入,表达式的值必须相同,并且它的求值必须没有副作用。非引用透明的表达式称为引用不透明。

    有了上面的解释,我们可以很快地把它和备忘录的行为联系起来,这个概念让我们可以写出一个带备忘录的函数。

    2.查找表

    查找表(LUT)是一个数组,它用更为简单的数组索引操作取代运行时计算。该过程被称为“直接寻址”,LUT与哈希表的不同之处在于它检索的是一个值。

    比较函数使用备忘录和不用备忘录

    以经典的斐波那契数列定义为例:

    function Fibo(n) {     if (n < 2) {         return n;     }     return Fibo(n - 1) + Fibo(n - 2);  }

    你可能预料到了,一旦开始使用大于20的数字,这个过程就会变得非常缓慢。而当你处理35左右的数字时,计算机估计也撑不住了。

    解决方法是记录调用函数的返回结果

    var IterMemoFib = function() {      var cache = [1, 1];      var fib = function(n) {          if (n >= cache.length) {              for (var i = cache.length; i <= n; i++) {                 cache[i] = cache[i - 2] + cache[i - 1];             }         }         return cache[n];     }    return fib;  }();

    这部分有点麻烦,也不完全可读,或者你也可以让计算机来协助完成:

    Fib = Fib.memoize();

    由于技术(浏览器安全策略)限制,备忘录函数的参数只能是数组或标量值,不能是对象。

    下面的代码扩展了Function对象以添加备忘录功能。如果函数是一个方法,则可以将对象传递给memoize()。

    Function.prototype.memoize = function () {  var pad = {};  var self = this;   var obj = arguments.length > 0 ? arguments[i] : null;     var memoizedFn = function () {   // Copy the arguments object into an array: allows it to be used as     // a cache key.     var args = [];     for (var i = 0; i < arguments.length; i++) {       args[i] = arguments[i];    }       // Evaluate the memoized function if it hasn't been evaluated with     // these arguments before.     if (!(args in pad)) {       pad[args] = self.apply(obj, arguments);    }       return pad[args];  };      memoizedFn.unmemoize = function () {     return self;   };     return memoizedFn;  };     Function.prototype.unmemoize = function () {   alert("Attempt to unmemoize an unmemoized function.");   return null;  };

    备忘录的意义

    • “记住”与某组特定输入相对应的结果

    • 备忘录降低了函数的时间成本以换取空间成本

    • 备忘录更不依赖机器

    到此,相信大家对“怎么使用备忘录来改进Javascript函数”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: 怎么使用备忘录来改进Javascript函数

    本文链接: https://lsjlt.com/news/326478.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • 怎么使用备忘录来改进Javascript函数
      本篇内容主要讲解“怎么使用备忘录来改进Javascript函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用备忘录来改进Javascript函数”吧!什么是备忘录备忘录是缓存的一种形式,...
      99+
      2023-06-29
    • 动态规划之使用备忘录来改进Javascript函数
      目录什么是备忘录备忘录的概念1.引用透明2.查找表比较函数使用备忘录和不用备忘录解决方法是记录调用函数的返回结果备忘录的意义结论:什么是备忘录前言; 动态规划已出现了十多年。根据维基...
      99+
      2024-04-02
    • Android Flutter怎么使用本地数据库编写备忘录应用
      这篇“Android Flutter怎么使用本地数据库编写备忘录应用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“...
      99+
      2023-07-05
    • win7备忘录小工具怎么用高手教你用win7备忘录小工具
       Win7内置的备忘录工具不仅可以作为提醒,还可以更好地规划我们的生活,提高生活和工作效率。但是Wind 7的备忘录工具在哪里呢有些用户对Win7备忘录工具的使用和打开方法不太熟悉,为此,小编将和大家分享一下win7的备忘录小工具怎么使用。...
      99+
      2023-07-10
    • Python的备忘录模式怎么应用
      这篇文章主要介绍“Python的备忘录模式怎么应用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python的备忘录模式怎么应用”文章能帮助大家解决问题。备忘录模式备忘录模式,在不破坏封闭的前提下,...
      99+
      2023-06-29
    • 使用javascript怎么对css进行修改
      这篇文章给大家介绍使用javascript怎么对css进行修改,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。javascript 动态修改css样式方法汇总(四种方法)在很多情况下,都需要对网页上元素的样式进行动态的修...
      99+
      2023-06-14
    • C++ 函数的递归实现:如何使用备忘录技术优化递归?
      优化递归的备忘录技术:使用备忘录存储已计算结果,避免重复计算。在 c++++ 中使用 unordered_map 作为备忘录,在计算前检查是否存在结果。存储计算结果后返回,提高遍历目录等...
      99+
      2024-04-22
      递归 备忘录 c++
    • JavaScript怎么作为方法来调用函数
      这篇文章主要讲解了“JavaScript怎么作为方法来调用函数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript怎么作为方法来调用函数”吧!...
      99+
      2024-04-02
    • JavaScript异步函数怎么使用
      这篇文章主要介绍了JavaScript异步函数怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript异步函数怎么使用文章都会有所收获,下面我们一起来看看吧。...
      99+
      2024-04-02
    • JavaScript的Promise函数怎么使用
      这篇文章主要介绍“JavaScript的Promise函数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript的Promise函数怎么使用”文...
      99+
      2024-04-02
    • javascript递归函数怎么使用
      这期内容当中小编将会给大家带来有关javascript递归函数怎么使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、说明所有递归函数都有一个通用模式 。它们总是由一个调用自身的递归部分和一个不调用自身...
      99+
      2023-06-15
    • JavaScript日期函数怎么使用
      这篇文章主要讲解了“JavaScript日期函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript日期函数怎么使用”吧!javascript时间函数javascrip...
      99+
      2023-06-26
    • javascript中XmlHttp.open函数怎么使用
      在JavaScript中,`XmlHttp.open()`函数用于创建一个新的XMLHttpRequest对象,并指定要发送的请求的...
      99+
      2023-09-14
      javascript
    • JavaScript组合函数怎么使用
      这篇文章主要讲解了“JavaScript组合函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript组合函数怎么使用”吧!如果没有组合函数 compose,函数连续调用...
      99+
      2023-07-02
    • JavaScript函数及prototype怎么使用
      这篇文章主要介绍“JavaScript函数及prototype怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript函数及prototype怎么使用”文章能帮助大家解决问题。一、...
      99+
      2023-07-05
    • 使用JavaScript怎么对CSS样式进行修改
      这期内容当中小编将会给大家带来有关使用JavaScript怎么对CSS样式进行修改,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。html中的内容:<!DOCTYPE html><...
      99+
      2023-06-14
    • JavaScript数组操作函数怎么使用
      这篇文章主要介绍“JavaScript数组操作函数怎么使用”,在日常操作中,相信很多人在JavaScript数组操作函数怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
      99+
      2024-04-02
    • JavaScript中怎么使用数字来索引数组
      本篇内容主要讲解“JavaScript中怎么使用数字来索引数组”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中怎么使用数字来索引数组”吧! ...
      99+
      2024-04-02
    • JavaScript函数怎么封装和使用
      本篇内容主要讲解“JavaScript函数怎么封装和使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript函数怎么封装和使用”吧!1、函数函数:...
      99+
      2024-04-02
    • 怎么在JavaScript中使用max函数
      这篇文章给大家介绍怎么在JavaScript中使用max函数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程...
      99+
      2023-06-14
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作