每日lodash源码阅读(一)——createMathOperation

每日lodash源码阅读(一)——createMathOperation

一、写在前面

createMathOperation是lodash的数学操作内置函数,add、divide等方法均是通过createMathOperation 创建出来的,阅读createMathOperation 可以掌握lodash的adddivide等方法。

二、使用举例

_.add(6, 4)

三、源码分析

add.js

import createMathOperation from './.internal/createMathOperation.js'

const add = createMathOperation((augend, addend) => augend + addend, 0)

export default add

可以看到,add方法很简单,就是调用createMathOperation方法,把结果赋值给add。
实际上,createMathOperation是一个高阶函数,接受一个函数作为参数,返回另一个函数。

createMathOperation.js

import baseToNumber from './baseToNumber.js'
import baseToString from './baseToString.js'

function createMathOperation(operator, defaultValue) {
  return (value, other) => {
  	// 调用add等函数,不传参,返回defaultValue(add等函数固定传入的defaultValue,比如上文中add传入的defaultValue是0)
    if (value === undefined && other === undefined) {
      return defaultValue
    }
    // 调用add等函数,只传一个合法参数,则把这个合法参数返回
    if (value !== undefined && other === undefined) {
      return value
    }
    if (other !== undefined && value === undefined) {
      return other
    }
    // 如果传入的参数含有字符串,则把两个参数都转换成string类型,add(1, '1') => '11'
    if (typeof value === 'string' || typeof other === 'string') {
      value = baseToString(value)
      other = baseToString(other)
    }
    else {// 否则都转换成number类型
      value = baseToNumber(value)
      other = baseToNumber(other)
    }
    // 将转换好的参数传入调用createMathOperation函数时传入的operator函数
    return operator(value, other)
  }
}

export default createMathOperation

createMathOperation返回了一个箭头函数,做了很多类型判断,最终执行add等方法传入的operator函数。
createMathOperation作为一个高阶函数,主要作用就是增加了参数校验功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值