JS中factorial函数进化的三个步骤
本篇內(nèi)容主要講解“JS中factorial函數(shù)進(jìn)化的三個(gè)步驟”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“JS中factorial函數(shù)進(jìn)化的三個(gè)步驟”吧!
一、首先寫一段求階乘的函數(shù)
用 memozation實(shí)現(xiàn)一段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 只用于函數(shù) factorial 之內(nèi),卻過分暴露于外。按照 least exposure(POLE) 將其隱藏起來。直覺方法就是直接將其放入其中。
二、初步解決接口過分暴露的問題
重新定義最外層coverTheCache函數(shù)將其包裹起來。
>functioncoverTheCache(){...//"middlescope",wherewecover`cache`...varcache={};......returnfactorial;......//**********************......functionfactorial(x){...//innerscope...if(x<2)return1;...if(!(xincache)){.....cache[x]=x*factorial(x-1);.....}...returncache[x];...}...}
運(yùn)行測(cè)試:
>letfactorial2=coverTheCache();>factorial2(9)362880>factorial(10)3628800
此解決方案完全符合直覺,就是單單的將步驟一中的factorial函數(shù)與變量cache收納到另外一個(gè)函數(shù)coverTheCache的肚子里,包裹了一層環(huán)境。
缺憾之處在于,`let factorial2 = hideTheCache();`此處還要另行調(diào)用。因此,接下來將重新declare與賦值的這一步去掉。
三、IIFE解決過分暴露的問題
>constfactorial3=(functioncoverTheCache(){...varcache={};......functionfactorial(x){...if(x<2)return1;...if(!(xincache)){.....cache[x]=x*factorial(x-1);.....}...returncache[x];...}......returnfactorial;...})();//關(guān)鍵步驟undefined>factorial3(11)39916800>factorial(300)Infinity>factorial(30)2.6525285981219103e+32
如此就不必再另行一步調(diào)用,該方法稱之為 IIFE(
Immediately-Invoked-Function-Expression):
//outerscope(function(){//innerhiddenscope})();//moreouterscope
四、總結(jié)
我們以memorization的方式求factorial而遭遇over-exposure的問題,由此引出
priciple-of-lease-exposure的原則。
作為解決方案,直覺的做法是將其包裹在外層函數(shù)之內(nèi),不足之處在于需要重新declare函數(shù)。進(jìn)一步解決問題,省略掉重新declare與assignment,用IIFE,在定義的同時(shí)也實(shí)現(xiàn)定義。
以上就是factorial這個(gè)函數(shù)進(jìn)化的三個(gè)步驟。
總結(jié)
以上是生活随笔為你收集整理的JS中factorial函数进化的三个步骤的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决打开虚拟机 VMware Works
- 下一篇: 如何设置拼多多商家版退货地址 设置拼多多