成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

幫你精通JS:一段函數(shù)的進(jìn)化史

開發(fā) 前端
我們以memorization的方式求factorial而遭遇over-exposure的問題,由此引出priciple-of-lease-exposure的原則。作為解決方案,直覺的做法是將其包裹在外層函數(shù)之內(nèi),不足之處在于需要重新declare函數(shù)。進(jìn)一步解決問題,省略掉重新declare與assignment,用IIFE,在定義的同時也實(shí)現(xiàn)定義。

[[391818]]

一、首先寫一段求階乘的函數(shù)

用 memozation實(shí)現(xiàn)一段factorial

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

此處 cache 只用于函數(shù) factorial 之內(nèi),卻過分暴露于外。按照 least exposure(POLE) 將其隱藏起來。直覺方法就是直接將其放入其中。

二、初步解決接口過分暴露的問題

重新定義最外層coverTheCache函數(shù)將其包裹起來。

  1. function coverTheCache() { 
  2. ...     // "middle scope"where we cover `cache` 
  3. ...     var cache = {}; 
  4. ... 
  5. ...     return factorial; 
  6. ... 
  7. ...     // ********************** 
  8. ... 
  9. ...     function factorial(x) { 
  10. ...         // inner scope 
  11. ...         if (x < 2) return 1; 
  12. ...         if (!(x in cache)) { 
  13. .....             cache[x] = x * factorial(x - 1); 
  14. .....         } 
  15. ...         return cache[x]; 
  16. ...     } 
  17. ... } 

運(yùn)行測試:

  1. > let factorial2 = coverTheCache(); 
  2. > factorial2(9) 
  3. 362880 
  4. > factorial(10) 
  5. 3628800 

此解決方案完全符合直覺,就是單單的將步驟一中的factorial函數(shù)與變量cache收納到另外一個函數(shù)coverTheCache的肚子里,包裹了一層環(huán)境。

缺憾之處在于,`let factorial2 = hideTheCache();`此處還要另行調(diào)用。因此,接下來將重新declare與賦值的這一步去掉。

三、IIFE解決過分暴露的問題

  1. > const factorial3 = (function coverTheCache() { 
  2. ...     var cache = {}; 
  3. ... 
  4. ...     function factorial(x) { 
  5. ...         if (x < 2) return 1; 
  6. ...         if (!(x in cache)) { 
  7. .....             cache[x] = x * factorial(x - 1); 
  8. .....         } 
  9. ...         return cache[x]; 
  10. ...     } 
  11. ... 
  12. ...     return factorial; 
  13. ... })(); // 關(guān)鍵步驟 
  14. undefined 
  15. > factorial3(11) 
  16. 39916800 
  17. > factorial(300) 
  18. Infinity 
  19. > factorial(30) 
  20. 2.6525285981219103e+32 

如此就不必再另行一步調(diào)用,該方法稱之為 IIFE(

Immediately-Invoked-Function-Expression):

  1. // outer scope 
  2. (function(){ 
  3.     // inner hidden scope 
  4. })(); 
  5. // more outer scope 

四、總結(jié)

我們以memorization的方式求factorial而遭遇over-exposure的問題,由此引出

priciple-of-lease-exposure的原則。

作為解決方案,直覺的做法是將其包裹在外層函數(shù)之內(nèi),不足之處在于需要重新declare函數(shù)。進(jìn)一步解決問題,省略掉重新declare與assignment,用IIFE,在定義的同時也實(shí)現(xiàn)定義。

以上就是factorial這個函數(shù)進(jìn)化的三個步驟。

 

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2011-12-21 16:44:00

信息圖手機(jī)進(jìn)化史

2014-09-01 16:29:34

2018-08-22 17:58:01

數(shù)據(jù)平臺數(shù)據(jù)倉庫架構(gòu)

2010-07-27 14:04:52

2011-11-03 15:25:07

Android

2011-11-29 09:54:20

Google進(jìn)化史

2011-09-01 09:34:21

架構(gòu)

2023-04-13 13:25:40

ChatGPTGPT神經(jīng)網(wǎng)絡(luò)

2010-10-09 14:46:20

2018-03-23 12:20:25

數(shù)據(jù)中心網(wǎng)絡(luò)數(shù)據(jù)

2024-09-21 10:43:15

數(shù)據(jù)技術(shù)信息

2013-06-24 09:18:05

2010-04-07 14:54:20

Unix操作系統(tǒng)

2023-11-27 09:23:19

2022-03-25 14:01:20

元宇宙虛擬世界進(jìn)化

2016-02-04 09:17:59

2010-01-21 16:08:26

C++語言

2022-03-29 09:35:15

FirefoxUI瀏覽器

2019-06-19 15:54:12

Redis緩存內(nèi)存

2014-08-13 10:31:26

Windows操作系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 日韩欧美国产精品 | 国产日韩一区二区三区 | 国产精品3区 | 色www精品视频在线观看 | 成人在线免费视频 | 一区二区三区四区国产精品 | 伊人伊成久久人综合网站 | 狠狠干狠狠操 | 国产成人精品av | 久久一本 | 91福利网址| 欧美日韩a | 免费国产一区二区 | 国产精品毛片无码 | 一区二区不卡高清 | 精品影院 | 日本精a在线观看 | 精品久久精品 | 亚洲一区二区久久 | 精品二三区 | 亚洲精品第一国产综合野 | 午夜免费福利电影 | 在线观看亚洲欧美 | 一级毛片视频 | 欧美精品一区在线 | 看亚洲a级一级毛片 | 国产欧美日韩综合精品一区二区 | 成人不卡视频 | 国产精品久久欧美久久一区 | 欧美一区2区三区4区公司二百 | 另类二区 | 美女日皮网站 | 91精品久久久久久久久中文字幕 | 精品动漫一区 | 99只有精品 | 国产一区二区在线看 | 日本欧美在线观看视频 | 国产精品久久久久久久久免费桃花 | 中文字幕久久久 | 夜久久| 国产日韩精品在线 |