【JS基础整理—No.07】函数柯里化

目录

一、引入柯里化

二、柯里化的含义

三、柯里化函数

1.初步实现版本:(可以不看)

2.优化版本:(可以不看)

3.终极版本:

四、柯里化面试题

五、柯里化使用场景


一、引入柯里化

大多数同学初次遇到柯里化都是在这几道面试题当中。

  1. 实现一个函数功能:sum(1,2,3,4…n)转化为 sum(1)(2)(3)(4)…(n)

  2. 实现一个add方法,使计算结果能够满足如下预期: add(1)(2)(3) = 6; add(1, 2, 3)(4) = 10; add(1)(2)(3)(4)(5) = 15;

  3. 防抖和节流也是柯里化,手写防抖节流,手写反柯里化。

二、柯里化的含义

什么叫柯里化呢?

先介绍一个小的知识点:

高阶函数——>偏函数——>柯里化(包括的关系)

高阶函数:其中一个特点是可以暂存变量(∵内部有闭包)

偏函数:返回一个函数,函数的参数不止一个。

柯里化:把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数。(官方解释永远都是一下给你干懵,别急看完这一部分就明白了)

柯里化就是让一个函数变得更具体一些,就是使函数的作用效果变得更小。把一个函数传递多个参数完成的事情改变成一个函数传递一个参数的多个函数形式。 原则上返回的一个函数只能接收一个参数,但多个参数我们通常也叫柯里化。

【这里举个例子解释一下👇】

// 1. 我们先写一个判断数据类型的函数,返回值为Boolean
function isType(type,value){
    return Object.prototype.toString.call(value) === `[object ${type}]`
}
console.log(isType('String','chailo'))
console.log(isType('Number',123))
​
// 2. 接下来对函数修改,返回值为函数
function isNewType(type){
    return function(value){
        Object.prototype.toString.call(value) === `[object ${type}]`
    }
}
let isString = isNewType('String')
let isNumber = isNewType('Number')
console.log(isString('chailo'))
console.log(isNumber(123))
​
// 以前函数使检测各种类型变量的变量类型,现在就是只检测它是不是String类型,这个过程就是使函数更具体的过程。

怎么就使函数更具体了呢?

上面呢只是一个栗子,使函数具体的过程就是函数柯里化的过程,这个过程就是对函数参数进行处理的过程。我们再来品味刚刚的官方解释,相信一下子就明白在表达什么。通俗理解:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。

为什么要柯里化呢?

可能你就会问,折腾了这么半天的目的是什么呢?感觉代码还变多了呢,本来可以一步到位的事情。之前我

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值