91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JS中factorial函數進化的三個步驟

發布時間:2021-06-26 13:37:25 來源:億速云 閱讀:484 作者:chen 欄目:web開發

本篇內容主要講解“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函數進化的三個步驟”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

js
AI

大连市| 灌南县| 沙河市| 克东县| 灵宝市| 信丰县| 克什克腾旗| 佛冈县| 本溪市| 大渡口区| 怀柔区| 香格里拉县| 泉州市| 龙胜| 扎鲁特旗| 修文县| 昭苏县| 辉南县| 五河县| 即墨市| 西华县| 招远市| 东安县| 苗栗县| 峨眉山市| 剑阁县| 上虞市| 涞源县| 洛浦县| 隆昌县| 阿拉善右旗| 大宁县| 靖远县| 湘乡市| 澜沧| 乌拉特中旗| 卓尼县| 肃宁县| 顺昌县| 偃师市| 荣昌县|