南京网站开发注册app9377传奇手游官网
2026/6/20 12:42:21 网站建设 项目流程
南京网站开发注册app,9377传奇手游官网,wordpress手机浏览评论,wordpress调用目录短视频开源源码#xff0c;js函数柯里化 函数柯里化 维基百科#xff1a; 柯里化#xff08;英语#xff1a;Currying#xff09;#xff0c;又译为卡瑞化或加里化#xff0c;是把接受多个参数的函数变换成接受一个单一参数#xff08;最初函数的第一个参数#xff09…短视频开源源码js函数柯里化函数柯里化维基百科 柯里化英语Currying又译为卡瑞化或加里化是把接受多个参数的函数变换成接受一个单一参数最初函数的第一个参数的函数并且返回接受余下的参数而且返回结果的新函数的技术。这里说的是 返回一个接受单一参数的函数我觉得我们实现的时候可以更灵活返回一个可以接受任意多参数的函数柯里化有什么用途curry 的概念很简单只传递给函数一部分参数来调用它让它返回一个函数去处理剩下的参数。// 原函数varaddfunction(x,y){returnxy;};// 简单curry化后 应该是varaddfunction(x){returnfunction(y){returnxy;};};// 实现分开传参的目的// 先加10varaddTenadd(10);// 再加5addTen(5);// 15addTen(10);// 20好处: 可以固定相同参数实现函数调用传参的简单化。举个例子计算一个长方体的体积如果长方体长和宽是不变高度是发生变化的。一般情况下我们会这么做functionvolumn(l,w,h){returnl*w*h}// 计算过程会变成这样letV1volumn(10,20,30)letV2volumn(10,20,20)letV3volumn(10,20,15)如果我们把volumn函数柯里化变成如下函数functioncurry_volumn(l,w){returnfunction(h){returnl*w*h}}// 计算过程可以优化如下// 先传入长和宽得到一个新函数letsquarecurry_volumn(x,y)// 再计算体积letV1square(30)letV2square(20)letV3square(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.lengthfn.length){// 如果传入参数长度等于原函数形参长度直接返回结果returnfn.apply(this,args)}else{// 否则返回一个函数letlengthargs.length;returnrec;functionrec(...others){if(others.lengthlengthfn.length){returnfn.apply(this,args.concat(others))}else{argsargs.concat(others)lengthothers.lengthlengthreturnrec}}}}}// 用上面的例子做测试functionvolumn(l,w,h){returnl*w*h}letcurry_volumncurry(volumn)letsquarecurry_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函数柯里化

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询