欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 综合教程 >内容正文

综合教程

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

发布时间:2023/12/15 综合教程 37 生活家
生活随笔 收集整理的这篇文章主要介绍了 JS中factorial函数进化的三个步骤 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

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

用 memozation实现一段factorial

>varcache={};>>functionfactorial(x){...if(x<2)return1;...if(!(xincache)){.....cache[x]=x*factorial(x-1);.....}...returncache[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函数将其包裹起来。

>functioncoverTheCache(){...//"middlescope",wherewecover`cache`...varcache={};......returnfactorial;......//**********************......functionfactorial(x){...//innerscope...if(x<2)return1;...if(!(xincache)){.....cache[x]=x*factorial(x-1);.....}...returncache[x];...}...}

运行测试:

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

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

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

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

>constfactorial3=(functioncoverTheCache(){...varcache={};......functionfactorial(x){...if(x<2)return1;...if(!(xincache)){.....cache[x]=x*factorial(x-1);.....}...returncache[x];...}......returnfactorial;...})();//关键步骤undefined>factorial3(11)39916800>factorial(300)Infinity>factorial(30)2.6525285981219103e+32

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

Immediately-Invoked-Function-Expression):

//outerscope(function(){//innerhiddenscope})();//moreouterscope

四、总结

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

priciple-of-lease-exposure的原则。

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

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

总结

以上是生活随笔为你收集整理的JS中factorial函数进化的三个步骤的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。