当前位置: 首页 > news >正文

短视频开源源码,js函数柯里化

短视频开源源码,js函数柯里化

函数柯里化

维基百科: 柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。(这里说的是 返回一个接受单一参数的函数,我觉得我们实现的时候,可以更灵活,返回一个可以接受任意多参数的函数)

柯里化有什么用途

curry 的概念很简单:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。

// 原函数varadd=function(x,y){returnx+y;};// 简单curry化后 应该是:varadd=function(x){returnfunction(y){returnx+y;};};// 实现分开传参的目的// 先加10varaddTen=add(10);// 再加5addTen(5);// 15addTen(10);// 20

好处: 可以固定相同参数,实现函数调用传参的简单化。

举个例子,计算一个长方体的体积,如果长方体长和宽是不变,高度是发生变化的。
一般情况下我们会这么做:

functionvolumn(l,w,h){returnl*w*h}// 计算过程会变成这样letV1=volumn(10,20,30)letV2=volumn(10,20,20)letV3=volumn(10,20,15)如果我们把volumn函数柯里化,变成如下函数:functioncurry_volumn(l,w){returnfunction(h){returnl*w*h}}// 计算过程可以优化如下// 先传入长和宽,得到一个新函数letsquare=curry_volumn(x,y)// 再计算体积letV1=square(30)letV2=square(20)letV3=square(15)

例子简单,大家自己体会其中的好处。下面我们就是要实现一个curry工具。

curry工具函数的简单实现

​ 需要注意传入工具函数的函数参数是不一定的。

// 思路:// 1. curry工具函数 接受一个函数返回一个函数,框架如下:// function curry(fn) {// return function(...args) {}// }// 2. 返回的函数可以接受一个参数或者多个参数,// a.如果args长度大于等于 fn.length(形参),直接返回fn函数的执行结果// b.如果args长度小于 fn.length(形参),继续返回一个函数,返回的函数需要继续执行第二步的递归调用,别且记录前几次输入的参数,知道参数长度大于等于fn.length,返回fn执行结果// function curry(fn) {// return function(...args) {// if(args.length >= fn.length) {// 如果传入参数长度等于原函数形参长度,直接返回结果// } else {// 返回一个函数,函数内部需要重新比较args.length >= fn.length,于是我封装了递归函数 rec// }// }// }// 柯里化工具函数functioncurry(fn){// 获取形参的长度returnfunction(...args){if(args.length>=fn.length){// 如果传入参数长度等于原函数形参长度,直接返回结果returnfn.apply(this,args)}else{// 否则返回一个函数letlength=args.length;returnrec;functionrec(...others){if(others.length+length>=fn.length){returnfn.apply(this,args.concat(others))}else{args=args.concat(others)length=others.length+lengthreturnrec}}}}}// 用上面的例子做测试functionvolumn(l,w,h){returnl*w*h}letcurry_volumn=curry(volumn)letsquare=curry_volumn(10,20)console.log(square(10))// 2000console.log(square(20))// 4000console.log(square(30))// 6000// 测试传入不同数量的参数console.log(curry_volumn(10)(20)(30))// 6000console.log(curry_volumn(10)(20,30))// 6000console.log(curry_volumn(10,20)(30))// 6000console.log(curry_volumn(10)(20)(3

短视频开源源码,js函数柯里化

http://www.jsqmd.com/news/258176/

相关文章:

  • 论文写作“超能力”觉醒:书匠策AI如何让本科生变身学术“超级英雄”
  • 学术新次元:书匠策AI如何重构本科论文写作的“底层逻辑”
  • 【2026最新 架构环境安装篇一】云服务器Linux安装docker详细教程
  • 范式革命——从关键词到对话理解的演进
  • 2024必备10个降AI率工具,本科生速看!
  • 暗流涌动——AI搜索的社会影响与伦理深水区
  • 不思量,自难忘 ! 缅怀攵亲仙逝三周年。
  • 【跟随主线】低频量化周报(指数风险溢价比,配债完整数据集,可转债策略,上市公司礼品,交易总结)
  • 【云计算】云平台权限治理(五):VDC 的树形管理结构 - 详解
  • WorldModel_Theory_002_PPT
  • 计算机毕业设计|基于springboot + vue心理健康管理系统(源码+数据库+文档) - 教程
  • 2026年国内可靠的低烟无卤电力电缆制造企业电话,ZC-YJLV22低压电力电缆,低烟无卤电力电缆生产厂家推荐榜 - 品牌推荐师
  • 2025年市场有名的艺术漆产品推荐,艺术涂料/诺兰迪/诺兰迪艺术漆/环保艺术涂料/艺术漆/家装艺术漆,艺术漆公司排行 - 品牌推荐师
  • ALLEGRO怎么来回切换shape的圆角跟直角
  • 必看!2026年高品质卷帘门厂家推荐榜单,为您提供安全、耐用的卷帘门解决方案 - 睿易优选
  • 必看!2026年靠谱的防火玻璃门生产厂家推荐,为您的选购提供有效参考 - 睿易优选
  • 2025年上海国货美妆视频制作公司推荐排行,广州视频制作精选实力品牌 - 品牌推荐师
  • 粉尘浓度检测仪供货商怎么选,靠谱的厂家在这里! - 工业品牌热点
  • 用机器学习开展因果推断研究,核心思路其实很简单
  • C++ 学习笔记 58 C++11 nullptr 和 nullptr_t
  • sqlmap一把梭
  • 这 10 个 Vue3 性能优化技巧很实用,但很多项目都没用上
  • ALLEGRO怎么沿着SHAPE边沿放大缩小
  • 2026年智慧校园专项资金申报政策解析:重点支持哪些方向?
  • 国产化替代中,百度富文本编辑器支持哪些格式的截图粘贴?
  • 桌面大爷学Web(2)-AI SOLO模式实战:只动嘴不动手从零构建Vue地图页面
  • 【图像加密解密】傅立叶变换和相位掩膜带相位掩模的图像加密解密【含Matlab源码 14963期】
  • Maven教程(Maven简介之构建工具)
  • 【图像加密解密】基于matlab分数阶傅立叶变换和曲线锯变换图像加密解密【含Matlab源码 14962期】
  • 05谓词逻辑等值演算及推理