为什么要使用函数科里化?

22 篇文章 0 订阅
5 篇文章 0 订阅

什么函数科里化?

科里化(currying)又称部分求值,是高阶函数;它将一个接收多参数的函数转化为接收部分参数的函数。柯里化后的函数只传递部分参数来调用,并返回一个新的函数 去处理剩余的参数,是逐步传参的过程。科里化不会调用函数,只是函数的转换;为什么这样说?科里化是将函数fn(a, b, c)转换成了fu(a)(b)(c);

科里化的目的是什么?

个人觉得,主要目的是减少代码冗余,以及增加代码的可读性,还可以用于优化比较耗时的计算,通过将计算结果缓存到内存中(闭包)。

看一个例子:

let tags = ["div", "span", "a", "img"];
function curry(tags) {
  let set = {};
  tags.map((key) => {
    set[key] = true;
  });
  return (tagName) => {
    return !!set[tagName];
  };
}
let isHtmlTags = curry(tags);
console.log(isHtmlTags("div")); // true
console.log(isHtmlTags("span")); // true
console.log(isHtmlTags("b")); // false

假如有十个标签,只执行了一次下面的循环。

tags.map((key) => {
  set[key] = true;
});

如果不使用科里化,每次调用都会执行一次循环,此外,每次都要传入tags,不要好奇为什么不把tags定义在函数里面,这是为了复用,现在是 tags = ["div", "span", "a", "img"];在其他地方可能就是 nums = [1, 2, 3];

let tags = ["div", "span", "a", "img"];
function checkHtmlTag(tags, tagsName) {
  if (tags.indexOf(tagsName) > -1) {
    return true;
  } else {
    return false;
  }
}
let isHtmlTagsDiv = checkHtmlTag(tags, "div");
let isHtmlTagsSpan = checkHtmlTag(tags, "span");
let isHtmlTagsB = checkHtmlTag(tags, "b");
console.log(isHtmlTagsDiv); // true
console.log(isHtmlTagsSpan); // true
console.log(isHtmlTagsB); // false

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小小•愿望

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

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

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

打赏作者

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

抵扣说明:

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

余额充值