国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

匿名函數(shù)是一把雙刃劍,有利也有弊

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 20:17:39
文檔

匿名函數(shù)是一把雙刃劍,有利也有弊

匿名函數(shù)是一把雙刃劍,有利也有弊:作為函數(shù)式編程語(yǔ)言,函數(shù)在JavaScript中的重要地位和巨大作用你盡可想象。但在其提供巨大便利的同時(shí),也不可避免的帶來巨大的問題。匿名函數(shù)則更是一把雙刃劍,它讓函數(shù)式編程語(yǔ)言更加完美,也讓代碼更加難于閱讀。你應(yīng)該知道匿名函數(shù)是以犧牲語(yǔ)義化為巨大代
推薦度:
導(dǎo)讀匿名函數(shù)是一把雙刃劍,有利也有弊:作為函數(shù)式編程語(yǔ)言,函數(shù)在JavaScript中的重要地位和巨大作用你盡可想象。但在其提供巨大便利的同時(shí),也不可避免的帶來巨大的問題。匿名函數(shù)則更是一把雙刃劍,它讓函數(shù)式編程語(yǔ)言更加完美,也讓代碼更加難于閱讀。你應(yīng)該知道匿名函數(shù)是以犧牲語(yǔ)義化為巨大代

作為函數(shù)式編程語(yǔ)言,函數(shù)在JavaScript中的重要地位和巨大作用你盡可想象。但在其提供巨大便利的同時(shí),也不可避免的帶來巨大的問題。

匿名函數(shù)則更是一把雙刃劍,它讓函數(shù)式編程語(yǔ)言更加完美,也讓代碼更加難于閱讀。你應(yīng)該知道匿名函數(shù)是以犧牲語(yǔ)義化為巨大代價(jià)的。

如果一個(gè)函數(shù)沒有名字,它可能無關(guān)緊要,在大部分場(chǎng)景中它都將失去意義。函數(shù)的名字跟你的名字,你朋友的名字,你家小寵物的名字一樣,是重要關(guān)鍵的,否則你寫它干嘛。

即使在看起來最沒有必要的位置使用命名函數(shù)也有巨大價(jià)值

你可能隨手就能枚舉很多場(chǎng)景來證明匿名函數(shù)的便利性,不可否認(rèn)有些場(chǎng)景無疑是有一些道理的,但大多數(shù)人以此為起點(diǎn),以善小而不為。比如

Array.some, Array.forEach, String.replace

這樣的例子能舉出不少,我們也可以理直氣壯的說他們不需要使用命名函數(shù),使用匿名函數(shù)更方便,并且大家都是這么做的。但是別忘了,some,forEach,replace本身已經(jīng)具有寬泛的語(yǔ)義了。但仍然可以更近一步:

1.Array.some, 廣泛的語(yǔ)義是找出數(shù)組中是否有一些,但究竟有一些什么呢?

2.Array.forEach, 廣泛的語(yǔ)義是遍歷,Array提供無數(shù)的函數(shù)用于遍歷,你為什么選擇forEach, 而不是map,every等等?

3.String.replace, 廣泛的語(yǔ)義是替換,但究竟是將什么替換成什么呢?

代碼是寫給人看的,

1.能不能不要讓我去讀你的代碼猜或者推理出來你要從數(shù)組中找出一些什么,是不是有整數(shù),是不是有空值?

2.能不能直接通過函數(shù)名告訴我你遍歷這個(gè)數(shù)組是想干什么?

3.能不能直接通過函數(shù)名告訴我你想將什么替換成什么?

舉個(gè)簡(jiǎn)單的例子,找出價(jià)格數(shù)組中是否存在整數(shù)價(jià)格。isInteger可能是已經(jīng)有的公共函數(shù),如果沒有的話,經(jīng)過你就有了。簡(jiǎn)潔易讀,在閱讀主流程的時(shí)候,有些代碼是不需要閱讀的,isInteger就是這樣一些代碼,萬一有錯(cuò)呢?isInteger是可測(cè)易測(cè)的,如果你不放心,對(duì)它執(zhí)行單元測(cè)試。你可能已經(jīng)注意到,一個(gè)小小的改變,有一部分代碼已經(jīng)具有可測(cè)性了。即使這里不是一個(gè)公用函數(shù),寫成命名函數(shù)也更整潔更可測(cè)。

var isAnyInteger = priceArr.some(Common.isInteger.bind(Common));

這些都是非常極端的被認(rèn)為是可以直接寫匿名函數(shù)的例子,但很明顯可以看到,他們也可以作為命名函數(shù)的邊界處理,即都寫命名函數(shù)百利而無一害,只會(huì)更好。

再簡(jiǎn)單的代碼也要區(qū)分架構(gòu)和實(shí)現(xiàn)

另外一個(gè)重災(zāi)區(qū)是 then 函數(shù),匿名函數(shù)的代碼不能更丑陋,即使大家都這么寫,你也應(yīng)該明白,你不能這么寫,正確的姿勢(shì)應(yīng)該寫成這樣, 以展示訂單為例:

/*
 * name : getOrder
 * description : 獲取訂單數(shù)據(jù) */function getOrder()
{//{{{var url = 'https://www.qunar.com/getOrder';//假如收集參數(shù)比較費(fèi)勁,應(yīng)該用一個(gè)函數(shù)專門去收集參數(shù)var params = getOrderParams();//假如參數(shù)體比較龐大,應(yīng)該先將其賦予一個(gè)變量var params = {
 orderNo:'248663058'};//無論如何,現(xiàn)將參數(shù)賦予變量你都將獲得在這里打印變量方便調(diào)試的便利console.log('getOrder url & params:', url, params);return $.post(url, params);
}//}}}/*
 * name : renderOrder
 * description : 拿訂單,拿到就在頁(yè)面上展示出來,拿不到就告訴用戶為什么沒拿到 */function renderOrder()
{//{{{//高級(jí)函數(shù),只安排工作,不自己實(shí)現(xiàn)//getOrder() 對(duì)該函數(shù)來說是不可見的,它要的只是訂單數(shù)據(jù),偷得搶的都可以 getOrder().then(render, remindUser);
}//}}}function render()
{//{{{}//}}}function remindUser()
{//{{{}//}}}

當(dāng)然,你可能覺得 renderOrder 就是雞肋,跟只拿工資不干活的領(lǐng)導(dǎo)簡(jiǎn)直一毛一樣,把then寫在 $.post 后面不就行了?

不行,如果有一天獲取訂單既可以從本地獲取,又可以從本地緩存獲取,那么getOrder就升級(jí)為次高級(jí)函數(shù),它管理兩個(gè)函數(shù) getOrderFromServer, getOrderFromCache

如果在獲取訂單之前或者之后還要做一些事情,那之后renderOrder能夠從容應(yīng)付。

想都不要想過度設(shè)計(jì)這個(gè)詞,大部分人沒有這個(gè)能力,不必杞人憂天。

你從一開始就是高級(jí)架構(gòu)師只不過兼職寫代碼

你可以清楚的看到,大量使用命名函數(shù)讓代碼結(jié)構(gòu)非常清晰,任何人都能容易的獨(dú)懂主流程,任何人都可以容易的去實(shí)現(xiàn)每一個(gè)命名函數(shù),要實(shí)現(xiàn)什么已經(jīng)清楚的寫在了函數(shù)名上了。

這些命名函數(shù)就像房屋的骨架,再往上堆疊就是一棟樓的骨架,你見過建筑設(shè)計(jì)師自己砌墻澆水泥的嗎?寫代碼也一樣,用函數(shù)堆疊成骨架,至于每個(gè)函數(shù)怎么實(shí)現(xiàn),請(qǐng)幫我實(shí)現(xiàn)(在你初學(xué)的時(shí)候就是請(qǐng)你自己幫你自己實(shí)現(xiàn))。

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

匿名函數(shù)是一把雙刃劍,有利也有弊

匿名函數(shù)是一把雙刃劍,有利也有弊:作為函數(shù)式編程語(yǔ)言,函數(shù)在JavaScript中的重要地位和巨大作用你盡可想象。但在其提供巨大便利的同時(shí),也不可避免的帶來巨大的問題。匿名函數(shù)則更是一把雙刃劍,它讓函數(shù)式編程語(yǔ)言更加完美,也讓代碼更加難于閱讀。你應(yīng)該知道匿名函數(shù)是以犧牲語(yǔ)義化為巨大代
推薦度:
標(biāo)簽: 一把 有利 雙刃劍
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲精品乱码久久久久久v 亚洲精品免费观看 | 国产精品美女一区二区 | 国产一区二区三区在线 | 97在线资源 | 综合精品欧美日韩国产在线 | 91中文字幕在线 | 97成人资源 | a欧美在线| 一区二区三区精品 | 亚洲综合欧美日本另类激情 | 国产高清不卡一区二区三区 | 国产高清不卡一区二区 | 午夜黄色在线观看 | 国产精品久久久久久永久牛牛 | 福利一区二区 | 午夜视频在线观看国产 | 亚洲综合久久久 | 日韩国产欧美一区二区三区 | 亚洲 欧美 国产另类首页 | 国产精品免费观看网站 | 超在线视频 | 国产一区二区三区免费 | 日本丶国产丶欧美色综合 | 国产91久久久久久久免费 | 欧美在线免费看 | 亚洲精品日韩专区在线观看 | 91中文视频 | 精品国产欧美 | 国产高清精品一区 | 亚洲一区 中文字幕 | 精品久久久久久久久中文字幕 | 麻豆系列 | 九九精品视频一区二区三区 | 毛片一级免费 | 不卡二区| 日韩欧美不卡一区二区三区 | 国产精品一区在线观看 | 欧美第五页 | 在线看精品 | 国产无卡一级毛片aaa | 国产精品一区欧美日韩制服 |