欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何讓你的JavaScript函數(shù)更加優(yōu)雅詳解

 更新時間:2021年07月01日 10:05:02   作者:Axjy  
在Js世界中有些操作會讓你無法理解,但是卻無比優(yōu)雅,下面這篇文章主要給大家介紹了關(guān)于如何讓你的JavaScript函數(shù)更加優(yōu)雅的相關(guān)資料,需要的朋友可以參考下

準(zhǔn)備寫一個js技巧系列,主要就是總結(jié)js各種實用的小竅門、小妙招。本文主要是研究如何讓我們的函數(shù)更清晰明了。

對象參數(shù)使用解構(gòu)

如果希望函數(shù)接收很多參數(shù)(如果超過兩個),那么就應(yīng)該使用對象。在此基礎(chǔ)上,可以使用解構(gòu)語法提取需要的參數(shù)。

普通寫法

const greet = (obj) => {
  return `${obj.greeting}, ${obj.firstName}${obj.lastName}`;
}

改寫

const greet = ({
  greeting,
  firstName,
  lastName
}) => {
  return `${greeting}, ${firstName}${lastName}`;
}

使用解構(gòu)方式會更優(yōu)雅,并且我們還可以少寫很多重復(fù)的東西,命名也會更加清晰。

命名回調(diào)函數(shù)

好的命名會使閱讀代碼更容易,回調(diào)函數(shù)的命名也是一樣。

普通寫法

const arr = [1, 2, 3].map(a => a * 2);

改寫

const double = a => a * 2;
const arr = [1, 2, 3].map(double);

分開命名,可以更好的一眼看出代碼的含義,如上:根據(jù)名字很明顯可以看出回調(diào)函數(shù)作用是用來加倍原始數(shù)組的每個元素的。

讓條件句具有描述性

對于復(fù)雜的條件判斷,我們可以單獨(dú)使用函數(shù)來表示,會讓條件語句更具描述性。

普通寫法

if (score === 100 || remainingPlayers === 1 || remainingPlayers === 0) {
    quitGame();
  }

改寫

const winnerExists = () => {
  return score === 100 ||
    remainingPlayers === 1 ||
    remainingPlayers === 0
}
if (winnerExists()) {
  quitGame();
}

按原來的寫法,我們有很長的表達(dá)式在括號里面,但是不太好看出它在判斷的是什么。改寫之后,我們把它放在一個命名函數(shù)中,根據(jù)名字我們就能大概看出表達(dá)的意思。

用 Map 或 Object替換 switch 語句

當(dāng)你的 switch語句很長時,就說明你應(yīng)該簡化你的代碼了

普通寫法

const getValue = (prop) => {
  switch (prop) {
    case 'a': {
      return 1;
    }
    case 'b': {
      return 2;
    }
    case 'c': {
      return 3;
    }
  }
}
const val = getValue('a');

Object改寫

const obj = {
  a: 1,
  b: 2,
  c: 3
}
const val = obj['a'];

我們使用switch嵌套多個帶有多個return語句的塊,只是為了獲得給定prop值的返回值時,我們僅僅使用一個對象也可以實現(xiàn)同樣的效果。

Map改寫

const map = new Map([['a', 1], ['b', 2], ['c', 3]])
const val = map.get('a')

使用Map時,代碼也短很多。我們通過傳遞一個數(shù)組,數(shù)組中的每項包含鍵和值。然后,我們僅使用Map實例的get方法從鍵中獲取值。Map優(yōu)于對象的一個好處是,我們可以將數(shù)字,布爾值或?qū)ο蟮绕渌涤米麈I。而對象只能將字符串或symbol作為鍵。

使用 Object.assign 設(shè)置默認(rèn)屬性

普通寫法

const menuConfig = {
  title: null,
  body: 'Bar'
};
function createMenu(config) {
  config.title = config.title || 'Foo';
  config.body = config.body || 'Bar';
}
createMenu(menuConfig);

改寫

const menuConfig = {
  title: 'Order',
  body: 'Send'
};
function createMenu(config) {
  config = Object.assign({
    title: 'Foo',
    body: 'Bar'
  }, config);
  // config : {title: "Order", body: "Bar"}
  // ...
}
createMenu(menuConfig);

刪除重復(fù)代碼,合并相似函數(shù);刪除棄用代碼

不好的寫法

var paging = function( currPage ){
    if ( currPage <= 0 ){
        currPage = 0;
        jump( currPage );    // 跳轉(zhuǎn)
    }else if ( currPage >= totalPage ){
        currPage = totalPage;
        jump( currPage );    // 跳轉(zhuǎn)
    }else{
        jump( currPage );    // 跳轉(zhuǎn)
    }
};

改寫

var paging = function( currPage ){
    if ( currPage <= 0 ){
        currPage = 0;
    }else if ( currPage >= totalPage ){
        currPage = totalPage;
    }
    jump( currPage );    // 把jump函數(shù)獨(dú)立出來
};

提煉函數(shù)

如果一個函數(shù)過長,不得不加上若干注釋才能讓這個函數(shù)顯得易讀一些,那這些函數(shù)就很有必要進(jìn)行重構(gòu)。

如果在函數(shù)中有一段代碼可以被獨(dú)立出來,那我們最好把這些代碼放進(jìn)另外一個獨(dú)立的函數(shù)。

示例

比如在一個負(fù)責(zé)取得用戶信息的函數(shù)里面,我們還需要打印跟用戶信息有關(guān)的log

var getUserInfo = function(){
    ajax( 'http:// xxx.com/userInfo', function( data ){
        console.log( 'userId: ' + data.userId );
        console.log( 'userName: ' + data.userName );
        console.log( 'nickName: ' + data.nickName );
    });
};

改寫

我們可以把打印log的語句封裝在一個獨(dú)立的函數(shù)里。

var getUserInfo = function(){
    ajax( 'http:// xxx.com/userInfo', function( data ){
        printDetails( data );
    });
};

var printDetails = function( data ){
    console.log( 'userId: ' + data.userId );
    console.log( 'userName: ' + data.userName );
    console.log( 'nickName: ' + data.nickName );
};

引用參考:JavaScript Refactoring Tips — Making Functions Clearer and Cleaner《JavaScript設(shè)計模式與開發(fā)實踐》

總結(jié)

到此這篇關(guān)于如何讓你的JavaScript函數(shù)更加優(yōu)雅的文章就介紹到這了,更多相關(guān)JavaScript函數(shù)優(yōu)雅內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 原生javascript實現(xiàn)隔行換色

    原生javascript實現(xiàn)隔行換色

    這篇文章主要介紹了原生javascript實現(xiàn)隔行換色,需要的朋友可以參考下
    2015-01-01
  • 一個頁面元素appendchild追加到另一個頁面元素的問題

    一個頁面元素appendchild追加到另一個頁面元素的問題

    一般都是自己創(chuàng)建元素然后append到頁面的但是如果是頁面本身有的元素append到另一個頁面元素呢,很多的新手朋友對此問題比較好奇,本人也是如此啊,好了不多說,切入主題,感興趣的朋友可以了解下哦
    2013-01-01
  • 最新評論