JavaScript代码优化之道

做大做强

我们先引入一句话:

代码主要是为了写给人看的,而不是写给机器看的,只是顺便也能用机器执行而已。

代码和语言文字一样是为了表达思想、记载信息,所以写得清楚能更有效地表达。本文多数总结自《重构:改善既有代码的设计(第2版)》我们直接进入正题,上代码!

提炼函数

what

将一段代码提炼到一个独立的函数中,并以这段代码的作用命名。

where

如果需要花时间浏览一段代码才能弄清楚它到底要干什么,那么这时候就应该将其提炼到一个函数中,并根据它所做的事命名。以后再读这段代码时,一眼就能知道这个函数的用途。

how

// ==================重构前==================
function printOwing(invoice) {
   
    let outstanding =0;
    console.log("***********************");
    console.log("**** Customer Owes ****");
    console.log("***********************");
}

// ==================重构后==================
function printOwing(invoice) {
   
    let outstanding = 0;
    printBanner()
}

function printBanner() {
   
    console.log("***********************");
    console.log("**** Customer Owes ****");
    console.log("***********************");
}

函数参数化

what

以参数的形式传入不同的值,消除重复函数

where

如果发现两个函数逻辑非常相似, 只有一些字面量值不同, 可以将其合并成一个函数, 以参数的形式传入不同的值, 从而消除重复。

how

// ==================重构前==================

// 点击异常项
clickFaultsItem(item){
   
    this.$u.route({
   
        url:'xxx',
        arams:{
   
            id: item.id,
            type: '异常'
        }
    })
}

// 点击正常项
clickNormalItem(item){
   
    this.$u.route({
   
        url:'xxx',
        params:{
   
            id: item.id,
            type: '正常'
        }
    })
}

// ==================重构后==================
clickItem(id, type){
   
     this.$u.route({
   
        url:'xxx',
        params:{
   id, type}
    })
}

使用策略模式替换“胖”分支

what

使用策略模式替换“胖胖”的if-else或者switch-case

where

当if-else或者switch-case分支过多时可以使用策略模式将各个分支独立出来

how

// ==================重构前==================
function getPrice(tag, originPrice) {
   
    // 新人价格
    if(tag === 'newUser') {
   
        return originPrice > 50.1 ? originPrice - 50 : originPrice
    }    // 返场价格
    if(tag === 'back') {
   
         return originPrice > 200 ? originPrice - 50 : originPrice
    }
    // 活动价格
    if(tag === 'activity') {
   
        return originPrice > 300 ? originPrice - 100 : originPrice
    }
}

// ==================重构后==================
const priceHandler = {
   
    newUser(originPrice){
   
        return originPrice > 50.1 ? originPrice - 50 : originPrice
    },
    back(originPrice){
   
        return originPrice > 200 ? originPrice - 50 : originPrice
    },
    activity(originPrice){
   
         return originPrice > 300 ? originPrice - 100 : originPrice
    }
}

function getPrice(tag, originPrice){
   
    return priceHandler[tag](originPrice)
}

提炼变量

what

提炼局部变量替换表达式

where

一个表达式有可能非常复杂且难以阅读。 这种情况下, 可以提炼出一个局部变量帮助我们将表达式分解为比较容易管理的形式 ,这样的变量在调试时也很方便。

how

// ==================重构前==================
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值