您當前位置: 南順網絡>> 官方資訊>> 建站知識

每日 30 秒 函數參數騷操作

在調用函數時不得不提的(de)就是 參數 了,很多小夥伴寫函數很容易就寫成了:

function area (width, height) {  
     return width * height; 
   }

兩個參數還好腦子(zǐ)記得住,但是下面這種情況乍辦:

function infomation ( name, sex, height, birthday,color, likes, follow, age ) {     // ... }

這麽多參數每次開發調用時有使用 ide 會自(zì)動提示還好,如(rú)果沒有則有可(kě)能需要翻文檔或者跳轉到定義處查看,除了比較麻煩點外還行。


不知道(dào)大家有沒有和(hé)别人對接過開發,有的(de)同學(xué)開發有時候不會考慮别人是否對他的(de)代碼有依賴,直接腦袋一(yī)拍就給你的(de)參數順序對調了,結果代碼提交後全軍崩潰各種報錯飄紅(hóng)

傳遞對象而不是參數列表

可(kě)以利用 JavaScript 的(de)對象來傳遞參數:

function infomation (user) {     // user.name }
 infomation({ name: 'xiaoer', age: 18 })

相對于參數列表傳遞對象屬性更好記也沒有強制的(de)順序,如(rú)果命名足夠清晰在後期維護代碼的(de)時候甚至隻要看屬性名就可(kě)以馬上理(lǐ)解過來。如(rú)果其他同學(xué)開發新的(de)功能也不會怕他順序亂調了,但是最好要對新加的(de)參數做(zuò)出兼容,不然還是會讓依賴的(de)其他函數一(yī)路飄紅(hóng)。

使用解構賦值

參數列表被對象替換解決了參數列表順序的(de)問題,可(kě)是每次調用的(de)時候都需要從對象中取值使得函數每次都要訪問對象,帶來了變量長(cháng)度變長(cháng)和(hé)很多無意義的(de)賦值。再者如(rú)果調用者不小心多傳遞了參數,再不巧函數中遍曆了對象這可(kě)能會産生BUG,可(kě)以利用解構賦值來解決:

function infomation ({ name, age, height }) { }

這樣既對傳遞的(de)參數做(zuò)出了防禦又可(kě)以方便的(de)使用參數。

使用默認值

你永遠不知道(dào)用戶會怎麽使用産品。

産品上線後總會出現各種奇奇怪怪的(de)錯誤,用戶總是不按照預期進行操作産品,不斷的(de) BUG 傳來實在讓人難受。

其實在調用函數時我們也是一(yī)個用戶,有的(de)參數不能為(wèi)空但是我們卻給出了空值,導緻函數不能按預期執行。在書寫函數時應該做(zuò)好别人調用函數時不按套路出牌的(de)情況,例如(rú)給出默認值和(hé)對數據進行轉化:

function infomation ({ name = 'anonymous', age = 0, height = 160 }) {     // ... }

當然你也可(kě)以使用 TypeScript 等工具來提升編程的(de)安全性,但 巧婦難為(wèi)無米之炊 在有的(de)時候不是你想用就能用的(de),需要整個公司一(yī)起進行技術的(de)升級。

參數變為(wèi)可(kě)選參數

上面例子(zǐ)中的(de)函數在 infomation({ age: 16 }) 這樣調用的(de)情況下,可(kě)以按照預期的(de)默認值執行。但是想讓這個對象也可(kě)選的(de)時候 infomation() 将會報錯,因為(wèi)沒有對象讓其解構,可(kě)以利用 {} 來使得對象也可(kě)選:

function infomation ({ name = 'anonymous', age = 0, height = 160 } = {}) {     // ... }

重命名

有時候需要對參數進行重命名,但是已經很多地(dì)方都使用了這個參數時。可(kě)以在函數執行最開始的(de)時候進行重命名,但是這樣顯然不夠 geek(主要是不夠偷懶)依舊(jiù)利用 解構賦值 來實現重命名:

function infomation ({ name:username = 'anonymous', age = 0, height = 160 } = {}) {     // ... }

當然 解構賦值 也可(kě)以在平常開發中使用,方便我們寫出 規範 的(de) 奇淫技巧,帶來偷懶摸魚同時也帶來優雅。




編輯:--史志成