返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JS中factorial函数进化的三个步骤
  • 499
分享到

JS中factorial函数进化的三个步骤

2024-04-02 19:04:59 499人浏览 安东尼
摘要

本篇内容主要讲解“js中factorial函数进化的三个步骤”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS中factorial函数进化的三个步骤”吧!一、首

本篇内容主要讲解“js中factorial函数进化的三个步骤”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS中factorial函数进化的三个步骤”吧!

一、首先写一段求阶乘的函数

用 memozation实现一段factorial

> var cache = {}; > > function factorial(x) { ...     if (x < 2) return 1; ...     if (!(x in cache)) { .....         cache[x] = x * factorial(x - 1); .....     } ...     return cache[x]; ... } > factorial(8) 40320 > cache { '2': 2, '3': 6, '4': 24, '5': 120, '6': 720, '7': 5040, '8': 40320 }

此处 cache 只用于函数 factorial 之内,却过分暴露于外。按照 least exposure(POLE)  将其隐藏起来。直觉方法就是直接将其放入其中。

二、初步解决接口过分暴露的问题

重新定义最外层coverTheCache函数将其包裹起来。

> function coverTheCache() { ...     // "middle scope", where we cover `cache` ...     var cache = {}; ... ...     return factorial; ... ...     // ********************** ... ...     function factorial(x) { ...         // inner scope ...         if (x < 2) return 1; ...         if (!(x in cache)) { .....             cache[x] = x * factorial(x - 1); .....         } ...         return cache[x]; ...     } ... }

运行测试

> let factorial2 = coverTheCache(); > factorial2(9) 362880 > factorial(10) 3628800

此解决方案完全符合直觉,就是单单的将步骤一中的factorial函数与变量cache收纳到另外一个函数coverTheCache的肚子里,包裹了一层环境。

缺憾之处在于,`let factorial2 =  hideTheCache();`此处还要另行调用。因此,接下来将重新declare与赋值的这一步去掉。

三、IIFE解决过分暴露的问题

> const factorial3 = (function coverTheCache() { ...     var cache = {}; ... ...     function factorial(x) { ...         if (x < 2) return 1; ...         if (!(x in cache)) { .....             cache[x] = x * factorial(x - 1); .....         } ...         return cache[x]; ...     } ... ...     return factorial; ... })(); // 关键步骤 undefined > factorial3(11) 39916800 > factorial(300) Infinity > factorial(30) 2.6525285981219103e+32

如此就不必再另行一步调用,该方法称之为 IIFE(

Immediately-Invoked-Function-Expression):

// outer scope (function(){     // inner hidden scope })(); // more outer scope

四、总结

我们以memorization的方式求factorial而遭遇over-exposure的问题,由此引出

priciple-of-lease-exposure的原则。

作为解决方案,直觉的做法是将其包裹在外层函数之内,不足之处在于需要重新declare函数。进一步解决问题,省略掉重新declare与assignment,用IIFE,在定义的同时也实现定义。

以上就是factorial这个函数进化的三个步骤。

到此,相信大家对“JS中factorial函数进化的三个步骤”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: JS中factorial函数进化的三个步骤

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

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

猜你喜欢
  • JS中factorial函数进化的三个步骤
    本篇内容主要讲解“JS中factorial函数进化的三个步骤”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS中factorial函数进化的三个步骤”吧!一、首...
    99+
    2024-04-02
  • js中异步函数asyncfunction变同步函数的简单入门
    目录js异步函数async function变同步函数入门异步函数(async/await)异步函数异步函数策略总结js异步函数async function变同步函数入门 js 中异...
    99+
    2023-05-17
    js异步函数 js async function js同步函数
  • JS中实现一个串型异步函数队列
    目录背景通常解法async/await 串型请求for...of 解法需求一reduce 实现需求二递归实现背景 在日常业务开发中,总会遇到这种场景,有一串请求,下一个请求依赖上一个...
    99+
    2024-04-02
  • Fedora9数据库中进行MySQL安装的步骤
    这篇文章主要介绍“Fedora9数据库中进行MySQL安装的步骤”,在日常操作中,相信很多人在Fedora9数据库中进行MySQL安装的步骤问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Fedora9数据库中...
    99+
    2023-06-16
  • 35个JS中实用工具函数的代码分享
    目录1.Js天数相加获取新日期2.获取当前日期(yyyyMMdd格式)3.四舍五入4.Js将数字转成中文大写数字5.判断数据是否为空6.字符串日期比较7.验证邮件8.判断是否为日期数...
    99+
    2024-04-02
  • php中对数组进行合成的函数是哪个
    这篇“php中对数组进行合成的函数是哪个”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php中对数组进行合成的函数是哪个”文...
    99+
    2023-07-02
  • JS中函数科里化的背景与应用实例教程
    目录背景使用场景JS中的函数科里化经典面试题:add(1)(2)(3)总结背景 柯里化(Currying)是一种关于函数的高阶技术。它不仅被用于 JavaScript,还被用于其他编...
    99+
    2024-04-02
  • PHP中的array_multisort()函数:如何对多个数组进行排序
    PHP中的array_multisort()函数:如何对多个数组进行排序,需要具体代码示例在PHP开发中,常常需要对多个数组进行排序,例如根据年龄、姓名等多个字段进行排序。PHP中提供了array_multisort()函数用于对多个数组进...
    99+
    2023-11-03
    PHP array_multisort 多个数组排序
  • 如何理解Python多线程中的三个函数的强大功能
    今天就跟大家聊聊有关如何理解Python多线程中的三个函数的强大功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在Python多线程中有三个比较简单的函数,在实际的相关操作中你对这...
    99+
    2023-06-17
  • php中将数组转化为字符串的函数是哪个
    本篇内容主要讲解“php中将数组转化为字符串的函数是哪个”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php中将数组转化为字符串的函数是哪个”吧!在php中implode()函数能将数组转化为字...
    99+
    2023-06-30
  • 你知道numpy编程算法中go函数的三个关键优势吗?
    当涉及到数值计算和科学计算时,NumPy是一个非常强大的工具。其中,NumPy的go函数是一个非常有用的编程算法,它可以在数值计算和科学计算中提供多种优势。在本文中,我们将探讨go函数的三个关键优势,并提供一些使用示例。 优势一:快速运算 ...
    99+
    2023-06-28
    函数 numpy 编程算法
  • 如何使用JS编写一个函数返回数组中重复出现过的元素
    这篇文章主要介绍了如何使用JS编写一个函数返回数组中重复出现过的元素,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。代码如下:var ...
    99+
    2024-04-02
  • C++ 函数的递归实现:如何在不同的编译器中进行优化?
    递归在 c++++ 中的优化方法有:尾调用优化 (tco): 将递归调用替换为循环,消除栈溢出风险,在 gcc 和 clang 编译器中支持。尾递归消除 (tre): 完全消除所有递归调...
    99+
    2024-04-23
    c++ 递归
  • load 函数在 ASP 编程中的异步编程算法是什么,如何优化?
    ASP 是一种常用的 Web 应用程序框架,它允许开发人员通过 ASP.NET 语言编写动态的 Web 应用程序。其中,load 函数是 ASP 编程中的一种异步编程算法,它在处理大量数据时尤为有效。在本文中,我们将详细探讨 load 函数...
    99+
    2023-07-25
    编程算法 load 异步编程
  • 异步编程技术在ASP中的应用:如何优化shell函数的执行效率?
    在ASP的开发中,我们经常需要执行一些外部的命令或程序,比如利用shell函数来执行一些批处理文件或者调用一些外部的可执行文件。然而,这些操作通常会耗费大量的时间,导致网站的响应速度变慢,影响用户的体验。为了解决这个问题,我们可以采用异步...
    99+
    2023-09-30
    异步编程 函数 shell
  • js中的异步获取到的数据到底能不能赋值给一个全局变量问题
    目录js异步获取到的数据到底能不能赋值给一个全局变量原生js设置并获取全局变量1.通过window对象设置和获取全局变量2.使用ES6新增的let命令声明全局变量3.使用ES6新增的...
    99+
    2023-05-17
    js中的异步 js异步获取数据 js赋值给全局变量
  • 大规模异步新闻爬虫中如何实现一个更好的网络请求函数
    这篇文章将为大家详细讲解有关大规模异步新闻爬虫中如何实现一个更好的网络请求函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。downloader 的实现import requestsimport...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作