亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JS代碼簡潔方式之函數(shù)方法詳解

 更新時間:2020年07月28日 16:39:13   作者:陌上兮月  
這篇文章主要介紹了JS代碼簡潔方式之函數(shù)方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

函數(shù)的參數(shù)越少越好

有一個準則是:如果你的函數(shù)參數(shù)超過兩個,就應(yīng)該改為對象傳入。

這樣做是合理的,因為當函數(shù)參數(shù)超過兩個時,參數(shù)順序開始變得難以記憶,而且容易出現(xiàn)一種很尷尬的情況:比如我只需要傳入第三個參數(shù),因為其自身順序的原因,不得不補齊前兩個根本用不上的參數(shù),以讓它順利排在第三位。

// bad
const createArticle = (title, author, date, content) => { }
createArticle('震驚,一男子竟偷偷干這事', 'zhangnan', '2020/06/29', '某天深夜,我喝多了點酒...')

// good
const createArticle = ({title, author, date, content}) => { }
createArticle({
 title: '震驚,一男子竟偷偷干這事',
 author: 'zhangnan',
 date: '2020/06/29',
 content: '某天深夜,我喝多了點酒...'
})

保持函數(shù)的單一職責原則

這是軟件開發(fā)領(lǐng)域亙古不變的一個真理,讓一個函數(shù)只專注于一件事情,能夠很好的解耦各個功能之間的聯(lián)系,使得后續(xù)對某一個功能進行更改時,不用擔心會影響其他模塊。

假設(shè)我們現(xiàn)在有一個需求:現(xiàn)在需要給班里的每一個同學發(fā)放假短信通知,如果是男生,就用電信主機號來發(fā),如果是女生,則用聯(lián)通主機號發(fā),同時額外發(fā)送一封愛心郵件。實現(xiàn)如下:

// bad 代碼擠成一堆,很難理清
// 男生女生的通知方式還有所不同,后期如果要改動女生的通知方式,很難保證不會影響到男生
// 因為大家都寫在同一個函數(shù)里

const notifyStudents = (studentList) => {
 studentList.forEach(student => {
  if (student.gender === 'male') {
   const sender1 = new SmsSender({ carrier: '電信' });
   sender1.init();
   sender1.sendTo(student) 
  } else {
   const sender2 = new SmsSender({ carrier: '聯(lián)通' });
   sender2.init();
   sender2.sendTo(student);
   
   const sender3 = new EmailSender({ type: 'QQ郵箱' });
   sender3.connect();
   sender3.sendTo(student)
  }
 })
}


// good 函數(shù)拆分,各司其職,清晰明了
// 雖然看起來代碼量多了一點點
// 但是分工明確,互不影響
const initSmsSender = (carrier) => {
 const sender = new SmsSender({ carrier });
 sender.init();
}

const initEmailSender = (type) => {
 const sender = new EmailSender({ type });
 sender.connect();
}

const notifyMales = (studentList) => {
 const smsSender = initSmsSender('電信');
 const maleList = studentList.filter(student => student.gender === 'male');
 
 maleList.forEach(male => smsSender.sendTo(male));
}

const notifyFemales = (studentList) => {
 const smsSender = initSmsSender('聯(lián)通');
 const emailSender = initEmailSender('QQ郵箱');
 
 const femaleList = studentList.filter(student => student.gender === 'female');
 
 femaleList.forEach(female => {
  smsSender.sendTo(female);
  emailSender.sendTo(female);
 })
}

封裝條件語句

像有一些條件語句,可能存在很多與或非邏輯,如果直接寫在函數(shù)里面,每次都需要重新理一遍,費時費力。把一堆條件語句封裝在一個函數(shù)里面,不僅遵循單一職責原則,也將使得閱讀更加方便。

// bad
const shouldIBuyThisPhone = (phone) => {
 const {price, year, brand} = phone;
 if (price > 5000 && year === new Date.getFullYear() && brand === 'huawei') {
  // 馬上剁手
 }
}

// good
const isHuaweiFlagShipThisYear = ({ price, year, brand }) => {
 const HIGH_PRICE = 5000;
 return price > HIGH_PRICE && year === new Date.getFullYear() && brand === 'huawei'
}

const shouldIBuyThisPhone = (phone) => {
 if (isHuaweiFlagShipThisYear(phone)) {
  // 馬上剁手
 }
}

高層函數(shù)不要依賴具體實現(xiàn)

在一些動作函數(shù)中,常見的一種情況是傳一個flag參數(shù),通過對標志變量的判斷,做出不同的響應(yīng)動作。

這樣其實是不太好的,因為這會使這個動作函數(shù)內(nèi)部去維護一些判斷邏輯,如果flag參數(shù)比較多,函數(shù)內(nèi)部的區(qū)分情況也會很多。

另外這里也涉及一種思想:具體的差異實現(xiàn)應(yīng)該由使用者提供,而不是統(tǒng)一執(zhí)行者去維護。

或者稱之為依賴倒置原則:高層模塊(打印)不應(yīng)該依賴于實現(xiàn)細節(jié)(某個人的喜好)。

比如,我現(xiàn)在有一臺打印機🖨️,小A喜歡用單面黑白橫向打印,小B喜歡用單面彩色豎向打印,小C喜歡用雙面彩色橫向打印等等等等。作為一臺打印機,它需要去維護一個人員喜好列表嗎?如果有一千個人使用它,那它就需要維護一千條數(shù)據(jù)。

它只是一臺打印機!告訴它配置,然后打印,就完事了!打印機只專注于打印這件事本身。

// bad 需要判斷標志變量,同時做出不同的相應(yīng)動作
const print = (person) => {
 if (person === 'A') {
  device.print({ 
   page: 1, 
   color: 'gray', 
   orientation: 'landscape' 
   
  })
 }
 
 else if (person === 'B') {
  device.print({ 
   page: 1, 
   color: 'colorful', 
   orientation: 'vertical' 
  })
 }
 
 else if (person === 'C') {
  device.print({ 
   page: 2, 
   color: 'colorful' ,
   orientation: 'landscape'
  })
 }
 
 ......
 
}


// good
const print = (config) => {
 device.print(config)
}

寫在最后

總結(jié):

  • 函數(shù)傳參越少越好,多了改為對象傳入
  • 保持函數(shù)單一職責原則
  • 封裝條件語句
  • 高層函數(shù)不要依賴具體實現(xiàn)

到此這篇關(guān)于JS代碼簡潔方式之函數(shù)方法詳解的文章就介紹到這了,更多相關(guān)JS代碼簡潔方式 函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • layer 刷新某個頁面的實現(xiàn)方法

    layer 刷新某個頁面的實現(xiàn)方法

    今天小編就為大家分享一篇layer 刷新某個頁面的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JavaScript中雙等號(==)和三等號(===)有何不同以及何時使用它們詳解

    JavaScript中雙等號(==)和三等號(===)有何不同以及何時使用它們詳解

    這篇文章主要給大家介紹了關(guān)于JavaScript中雙等號(==)和三等號(===)有何不同以及何時使用它們的相關(guān)資料,在JavaScript中"=="和"==="都是比較運算符,用于比較兩個值是否相等,需要的朋友可以參考下
    2024-01-01
  • JS全局變量和局部變量最新解析

    JS全局變量和局部變量最新解析

    這篇文章主要介紹了JS全局變量和局部變量最新解析的相關(guān)知識,本文給給大家補充js刪除局部變量的代碼,非常不錯,具有參考借鑒價值,感興趣的朋友一起學習吧
    2016-06-06
  • 詳解JavaScript中var和let的區(qū)別

    詳解JavaScript中var和let的區(qū)別

    在JavaScript中,有3個關(guān)鍵字可以聲明變量:var、const和let,其中var在ECMAScript的所有版本中都可以使用,而const和let只能在ECMAScript 6及更晚的版本中使用,本文就來說說二者的區(qū)別,感興趣的可以了解一下
    2022-11-11
  • JS實現(xiàn)六邊形3D拖拽翻轉(zhuǎn)效果的方法

    JS實現(xiàn)六邊形3D拖拽翻轉(zhuǎn)效果的方法

    這篇文章給大家分享一個利用javascript實現(xiàn)3D六邊形拖拽翻轉(zhuǎn)的效果實例,實現(xiàn)后的效果很贊,對大家的學習Javascript具有一定的參考借鑒價值,有需要的朋友們一起去來看看吧。
    2016-09-09
  • JavaScript基于Dom操作實現(xiàn)查找、修改HTML元素的內(nèi)容及屬性的方法

    JavaScript基于Dom操作實現(xiàn)查找、修改HTML元素的內(nèi)容及屬性的方法

    這篇文章主要介紹了JavaScript基于Dom操作實現(xiàn)查找、修改HTML元素的內(nèi)容及屬性的方法,涉及javascript dom模型及事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • JavaScript實現(xiàn)手機號碼 3-4-4格式并控制新增和刪除時光標的位置

    JavaScript實現(xiàn)手機號碼 3-4-4格式并控制新增和刪除時光標的位置

    這篇文章主要介紹了JavaScript實現(xiàn)手機號碼 3-4-4格式并控制新增和刪除時光標的位置,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • 純JS代碼實現(xiàn)一鍵分享功能

    純JS代碼實現(xiàn)一鍵分享功能

    在qq空間,新浪微博,人人網(wǎng)等網(wǎng)絡(luò)平臺大家經(jīng)常可以看到一鍵分享功能,那么基于js代碼是如何實現(xiàn)一鍵分享的呢?下面腳本之家小編給大家介紹js實現(xiàn)一鍵分享功能的代碼,需要的朋友參考下吧
    2016-04-04
  • JavaScript頁面回流與重繪

    JavaScript頁面回流與重繪

    這篇文章主要介紹了JavaScript頁面回流與重繪,一個html頁面是一個整體,當這個整體中的某一個部分發(fā)生改變,那么這個頁面整體會重新進行渲染,而如果我們采用添加標簽的方式,每次添加一個標簽,就會讓每一次頁面都重新渲染,性能急劇下降,下面來看看具體內(nèi)容吧
    2022-01-01
  • JavaScript 常見的繼承方式匯總

    JavaScript 常見的繼承方式匯總

    這篇文章主要匯總了JavaScript 常見的繼承方式,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下
    2020-09-09

最新評論