首页 > 其他分享 >JS 柯里化函数随笔

JS 柯里化函数随笔

时间:2022-09-30 18:45:55浏览次数:62  
标签:... return len JS 柯里化 const 随笔 curry fn

模拟实现

const slice = Array.prototype.slice;
const curryMaker = function(fn, len) {
  const curriedArgs = slice.call(arguments, 2);
  return curry.apply(this, [fn, (len || fn.length), ...curriedArgs]);
};

const curry = function(fn, len) {
  const curriedArgs = slice.call(arguments, 2);
  return function() {
    const args = [...curriedArgs, ...arguments];
    // 如果与预期的参数长度一致,则执行函数,获取返回值
    if (args.length >= len) {
      return fn.apply(this, args);
    }
    // 否则,整理入参,返回curry函数的结果
    return curry.apply(this, [fn, len, ...args]);
  };
};

function calcSum() {
  return [...arguments].reduce((pre, value) => { return pre + value }, 0);
}
const calcSumCurry = curry(calcSum, 4);

const nextCalc = calcSumCurry(1, 2);
console.log(nextCalc(3)(4));

 

标签:...,return,len,JS,柯里化,const,随笔,curry,fn
From: https://www.cnblogs.com/fanqshun/p/15967674.html

相关文章

  • 断点jsp-断点续传-大文件断点上传
    ​核心原理: 该项目核心就是文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题。* 如何分片;* 如何合成一......
  • JS理解复杂部分笔记
    Double、Float等值为什么有最大数值精度Double:保存方案为IEEE754,其中52位尾码,11位阶码。阶码范围位[-1023,1024],那么一定可以取到52,按照IEEE754二进制装十进制公式,最大......
  • Newtonsoft.Json 之HtmlEncodeConverter
    ///<summary>///html编码序列化转换器///</summary>publicclassHtmlEncodeConverter:JsonConverter{//是否开启自定义反序列化,值......
  • node js post请求(axios)
    node.js可以直接运行js文件 在电脑上配置了node就可以直接用了运行js文件:用vscode打开终端运行语法:nodefilename.js例:  node自带http模块,可以直接写post请......
  • threejs-模型点击以及添加CSS2DObject
    模型点击事件网上教程挺多的,官网好像也有demo,这里我就只记录我碰到的问题以及解决方案:首先要清楚一件事,就是模型的展示需要一个容器,当这个容器是body|window和非全屏的......
  • 程序员修炼之道-从小工到专家随笔1
       花了一个星期读这本书的前两章,其中令我最深刻的就是如何成为一个优秀的程序员,其中关于错误,基础的学首先要做一个注重实效的程序员1要保留有好奇心,要有批判的思维,......
  • 程序员修炼之道-从小工到专家随笔2
       在做项目的时候目己要先做一总,让别人看到希里,再说如果有什么就史好了,那么你就会米集更多优秀的人来帮你完成项日,不仅完成了自己的任务,还使人们更加团结,岂不是一前......
  • Jmeter 使用json提取器循环提取数组值
    一、使用json提取器提取数组值:   提取数组: -1代表取所有的数组值,默认值not_found;二、添加循环控制器,循环次数为数组长度:${变量名_matchNr}示例:${TaskID2_matchN......
  • Newtonsoft.Json保留小数Convert
    ///<summary>///自定义数值类型序列化转换器///</summary>publicclassDecimalDigitsConvert:JsonConverter{//是否开启自定义反......
  • Newtonsoft.Json时间处理
    一、使用自带的JsonSerializerSettingssettings=newJsonSerializerSettings();settings.Converters.Add(newIsoDateTimeConverter{Dat......