John Au-Yeung
來源:medium
譯者:前端小智
點贊再看,養成習慣本文
GitHub
https://github.com/qq44924588... 上已經收錄,更多往期高贊文章的分類,也整理了不少個人文檔,和教程資料。歡迎Star和完善,你們面試能夠參照考點複習,但願咱們一塊兒有點東西。javascript
JavaScript 是一種易於學習的編程語言,編寫運行並執行某些操做的程序很容易。然而,要編寫一段乾淨的JavaScript 代碼是很困難的。前端
在本文中,咱們將研究如何下降函數複雜度。java
咱們應該將重複的代碼提取出來,合併放到同個位置,這樣當有須要修改的,咱們只須要改一個地方便可,同時也減小犯錯率。git
假設咱們有可能很寫出下面的代碼:github
const button = document.querySelector('button'); let toggled = true; button.addEventListener('click', () => { toggled = !toggled; if (toggled) { document.querySelector("p").style.color = 'red'; } else { document.querySelector("p").style.color = 'green'; } })
上面代碼中有兩個document.querySelector(「p」)
,咱們能夠這樣優化,把document.querySelector(「p」)
保存到一個變量中,而後使用該變量便可,以下所示:面試
const button = document.querySelector('button'); const p = document.querySelector("p"); let toggled = true; button.addEventListener('click', () => { toggled = !toggled; if (toggled) { p.style.color = 'red'; } else { p.style.color = 'green'; } }
這樣咱們就沒必要寫長長的document.querySelector("p")
,只需寫個變量 p
就好了。編程
另外一個常見的代碼實例中的數字,光看數字咱們很難知道其表示的含義:微信
let x = 1; let y = 1; let z = 1;
咱們不知道上面這三個一表示什麼,因此咱們能夠移除重複的代碼,並用一個合適的變量名來表示,以下所示:編程語言
const numPeople = 1; let x = numPeople; let y = numPeople; let z = numPeople;
這樣咱們就能夠知道 numPeople
的值爲1
,其表示的人的數量。函數
函數應儘量簡單,最好只作一件事,行數也不要太多,最多不能超過 30 行。
咱們不該該使用 ES5 類的方式,也不該將IIFE用於模塊或塊。相反,咱們應該使用類語法,其中能夠在類中包含該類的多個實例方法。這會大大減小了函數的體量。
一樣,只要咱們能夠定義函數,函數就應該是純函數,這意味着他們不該該產生反作用。
例如,最好的簡單函數是以下:
const add = (a, b) => a + b;
上面的函數沒有任何反作用,由於它不會在函數外部修改任何變量。 另外,它也是一個純函數,對於相同的輸入,輸出的結果也都同樣的。
衛語句的定義用法
衛語句就是把複雜的條件表達式拆分紅多個條件表達式,好比一個很複雜的表達式,嵌套了好幾層的if - then-else語句,轉換爲多個if語句,實現它的邏輯,這多條的if語句就是衛語句
有時候條件式可能出如今嵌套n次才能真正執行,其餘分支只是簡單報錯返回的狀況,對於這種狀況,應該單獨檢查報錯返回的分支,當條件爲真時當即返回,這樣的單獨檢查就是衛語句(guard clauses).衛語句能夠把咱們的視線從異常處理中解放出來,集中精力到正常處理的代碼中。
好比咱們可能會編寫以下的代碼 :
const greet = (firstName, lastName, greeting) => { if (typeof firstName === 'string') { if (typeof lastName === 'string') { if (typeof greeting === 'string') { return `${greeting}, ${firstName}${lastName}`; } } } }
咱們能夠這樣優化
const greet = (firstName, lastName, greeting) => { if (typeof firstName !== 'string') { throw new Error('first name is required'); } if (typeof lastName !== 'string') { throw new Error('last name is required'); } if (typeof greeting !== 'string') { throw new Error('greeting is required'); } return `${greeting}, ${firstName}${lastName}`; }
在第二個示例中,若是每一個參數都不是字符串,則拋出錯誤,從而消除了嵌套的if
語句。
這將嵌套的if
語句在執行相同操做時減小爲沒有嵌套的if
語句。
嵌套很難閱讀和理解,咱們應該在全部地方都擺脫它們。
重複的代碼老是很差的。 咱們應該永遠記住「不要重複本身(DRY)」的原則。
另外應該使用一些新的方式來代替 ES5 時代的寫法。
最後,應將嵌套的if
語句替換爲衛語句,由於它們能夠執行與嵌套的if
語句相同的檢查,這樣有利於閱讀。
代碼部署後可能存在的BUG無法實時知道,過後爲了解決這些BUG,花了大量的時間進行log 調試,這邊順便給你們推薦一個好用的BUG監控工具 Fundebug。
原文:https://levelup.gitconnected....
文章每週持續更新,能夠微信搜索「 大遷世界 」第一時間閱讀和催更(比博客早一到兩篇喲),本文 GitHub https://github.com/qq449245884/xiaozhi 已經收錄,整理了不少個人文檔,歡迎Star和完善,你們面試能夠參照考點複習,另外關注公衆號,後臺回覆福利,便可看到福利,你懂的。