# é¢è¯å®ï¼Javascriptä¸å¦ä½å®ç°å½æ°ç¼åï¼å½æ°ç¼åæåªäºåºç¨åºæ¯ï¼  ## ä¸ãæ¯ä»ä¹ 彿°ç¼åï¼å°±æ¯å°å½æ°è¿ç®è¿çç»æè¿è¡ç¼å æ¬è´¨ä¸å°±æ¯ç¨ç©ºé´ï¼ç¼ååå¨ï¼æ¢æ¶é´ï¼è®¡ç®è¿ç¨ï¼ 常ç¨äºç¼åæ°æ®è®¡ç®ç»æåç¼å对象 ```js const add = (a,b) => a+b; const calc = memoize(add); // 彿°ç¼å calc(10,20);// 30 calc(10,20);// 30 ç¼å ``` ç¼ååªæ¯ä¸ä¸ªä¸´æ¶çæ°æ®åå¨ï¼å®ä¿åæ°æ®ï¼ä»¥ä¾¿å°æ¥å¯¹è¯¥æ°æ®ç请æ±è½å¤æ´å¿«å°å¾å°å¤ç ## äºãå¦ä½å®ç° å®ç°å½æ°ç¼å主è¦ä¾é éå ãæ¯éåãé«é¶å½æ°ï¼è¿éåç®åå¤ä¹ ä¸ï¼ ### éå éå å¯ä»¥çè§£æï¼å½æ° + 彿°ä½å å¯è®¿é®çåéæ»å ```js (function() { var a = 1; function add() { const b = 2 let sum = b + a console.log(sum); // 3 } add() })() ``` `add `彿°æ¬èº«ï¼ä»¥åå ¶å é¨å¯è®¿é®çåéï¼å³ `a = 1 `ï¼è¿ä¸¤ä¸ªç»åå¨â¼èµ·å°±å½¢æäºéå ### æ¯éå ææ¥åå¤ä¸ªåæ°ç彿°è½¬æ¢ææ¥åä¸ä¸ªåä¸åæ°ç彿° ```js // é彿°æ¯éå var add = function (x,y) { return x+y; } add(3,4) //7 // 彿°æ¯éå var add2 = function (x) { //**è¿å彿°** return function (y) { return x+y; } } add2(3)(4) //7 ``` å°ä¸ä¸ªäºå 彿°æåæä¸¤ä¸ªä¸å 彿° ### é«é¶å½æ° éè¿æ¥æ¶å ¶ä»å½æ°ä½ä¸ºåæ°æè¿åå ¶ä»å½æ°ç彿° ```js function foo(){ var a = 2; function bar() { console.log(a); } return bar; } var baz = foo(); baz();//2 ``` 彿° `foo` å¦ä½è¿åå¦ä¸ä¸ªå½æ° `bar`ï¼`baz` ç°å¨ææå¯¹ `foo` ä¸å®ä¹ç`bar` 彿°çå¼ç¨ãç±äºéå ç¹æ§ï¼`a`çå¼è½å¤å¾å° ä¸é¢åççå¦ä½å®ç°å½æ°ç¼åï¼å®ç°åçä¹å¾ç®åï¼æåæ°å对åºçç»ææ°æ®åå¨ä¸ä¸ªå¯¹è±¡ä¸ï¼è°ç¨æ¶å¤æåæ°å¯¹åºçæ°æ®æ¯å¦åå¨ï¼åå¨å°±è¿å对åºçç»ææ°æ®ï¼å¦åå°±è¿å计ç®ç»æ å¦ä¸æç¤º ```js const memoize = function (func, content) { let cache = Object.create(null) content = content || this return (...key) => { if (!cache[key]) { cache[key] = func.apply(content, key) } return cache[key] } } ``` è°ç¨æ¹å¼ä¹å¾ç®å ```js const calc = memoize(add); const num1 = calc(100,200) const num2 = calc(100,200) // ç¼åå¾å°çç»æ ``` è¿ç¨åæï¼ - å¨å½å彿°ä½ç¨åå®ä¹äºä¸ä¸ªç©ºå¯¹è±¡ï¼ç¨äºç¼åè¿è¡ç»æ - è¿ç¨æ¯éåè¿åä¸ä¸ªå½æ°ï¼è¿åç彿°ç±äºéå ç¹æ§ï¼å¯ä»¥è®¿é®å°`cache` - ç¶å夿è¾å ¥åæ°æ¯ä¸æ¯å¨`cache`çä¸ã妿已ç»åå¨ï¼ç´æ¥è¿å`cache`çå 容ï¼å¦ææ²¡æåå¨ï¼ä½¿ç¨å½æ°`func`对è¾å ¥åæ°æ±å¼ï¼ç¶åæç»æåå¨å¨`cache`ä¸ ## ä¸ãåºç¨åºæ¯ è½ç¶ä½¿ç¨ç¼åæçæ¯é常é«çï¼ä½å¹¶ä¸æ¯ææåºæ¯é½éç¨ï¼å æ¤åä¸ä¸è¦æç«¯çå°ææå½æ°é½æ·»å ç¼å 以ä¸å ç§æ åµä¸ï¼éå使ç¨ç¼åï¼ - å¯¹äºæè´µç彿°è°ç¨ï¼æ§è¡å¤æè®¡ç®ç彿° - 对äºå ·ææéä¸é«åº¦éå¤è¾å ¥èå´ç彿° - 对äºå ·æéå¤è¾å ¥å¼çéå½å½æ° - 对äºçº¯å½æ°ï¼å³æ¯æ¬¡ä½¿ç¨ç¹å®è¾å ¥è°ç¨æ¶è¿åç¸åè¾åºç彿° ## åèæç® - https://zhuanlan.zhihu.com/p/112505577