理解科里化函数(currying)及应用场景

理解科里化函数(currying)

英文是咖喱的意思,咖喱就是碾碎所有的佐料的混合物,制作过程我们需要将佐料一样一样的放入当中,柯里化就是这样的东西,将参数按照顺序排队进入,而不是一次性输入所有参数,所以柯里化函数专门用于做数据的混合,并且柯里化函数可以利用闭包来存储数据等到需要的时候拿出来使用。

柯理化函数:

  • 闭包函数的高阶应用
  • 作用就是通过延长变量的生命周期, 来吧一个函数传递多个参数完成的事情
  • 改变成一个函数传递一个参数, 的多个函数形式

标准样式案例

需求:

  • 两个数字 和 一个符号作为 参数
  • 根据符号进行两个数字的不同运算
  • 数字不变, 符号在改变
  function curry(){
      var arr=[];
      return function(){
      if(arguments.length>0){  //判断是否有参数
        arr=[].concat.apply(arr,arguments);
      }
      return arr.reduce((value,item)=>value+item); //求和
   	  }
}

    function fn(a, b) {
      return function inner(type) {
        let res
        switch (type) {
          case '+': res = a + b; break;
          case '-': res = a - b; break;
          case '*': res = a * b; break;
          case '/': res = a / b; break;
        }
        return res
      }
    }

    // f 接受到的就是 inner 函数
    var f = fn(100, 200)
    console.log(f('+'))
    console.log(f('-'))
    console.log(f('*'))
    console.log(f('/'))

柯里化的常见应用场景:

封装表单验证
 + 一个网站里面密码验证(格式的)会有多少次 ?
  => 登录, 注册, 修改密码, 修改个人资料
计算折扣价格时
 + 在计算折扣的时候无需每次都带上参数

  • 补充给个案例 这里使用了柯里化保存参数,并且使用了promise来封装,方便后续使用
  • 这是一个操作mysql数据库的方法
// db.js 只是负责连接数据库, 向外暴露一个连接信息
const mysql = require('mysql')

// 创建连接池
const db = mysql.createPool({
  host: 'localhost',
  port: 3306,
  user: 'root',
  password: 'root',
  database: 'root'
})

exports.db = db
const { db } = require('./db')

const select = function (sql) {
  return function (params = []) {
    return new Promise((resolve, reject) => {
      db.query(sql, params, (err, data) => {  
        if (err) return reject(err)
        resolve(data)
      })
    })
  }
}
const db = require('./db_crud')

const selectUser = db.select('SELECT * FROM `student` LIMIT ?, 10')
const deleteById = db.delete('DELETE FROM `users` WHERE `id`=?')

module.exports = {
  selectUser: selectUser,
  deleteById: deleteById
}


 使用时,直接导入该模块 
 const abc=require(...)  
 acc.selectUser([参数]).then(res=>{console.log(res}) 即可
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MaxLoongLvs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值