函数柯里化

原文:https://note.noxussj.top/?source=nowcoder

什么是函数柯里化?

函数柯里化(Haskell Brooks Curry),当一个函数有多个参数的时候先传递一部分参数并且调用它(这部分参数后续不会进行改变),然后返回一个新的函数接收剩余的参数并返回结果。

总结

  • 柯里化可以让我们给一个函数传递较少的参数得到一个已经记住了某些固定参数的新函数
  • 这是一种对函数参数的 "缓存"
  • 让函数变的更灵活,让函数的粒度更小

基础案例

案例 1

function checkAge(arg1) {
    return function (arg2) {
        return arg2 >= arg1
    }
}

// 检查是否大于 18 岁
let checkAge18 = checkAge(18)

// 检查是否大于 20 岁
let checkAge20 = checkAge(20)

console.log(checkAge18(19)) // true
console.log(checkAge20(19)) // false

案例 2

// 封装柯里化函数
function curry(fn) {
    return function curriedFn(...args) {
        if (args.length < fn.length) {
            return function (...args2) {
                return curriedFn(...args.concat(Array.from(args2)))
            }
        }
        return fn(...args)
    }
}

function getSum(a, b, c) {
    return a + b + c
}

const curried = curry(getSum)

const fn1 = curried(1) // 返回新函数,接收剩余的参数

const fn2 = fn1(2) // 返回新函数,接收剩余的参数

const fn3 = fn2(3) // 返回结果 6

原文:https://note.noxussj.top/?source=nowcoder

全部评论

相关推荐

1.&nbsp;自我介绍(5-10min)2.&nbsp;在工作中负责的模块是什么?3.&nbsp;工作中遇到的复杂的事情,以及是如何去解决的4.&nbsp;css布局了解多少,哪些布局用的比较多?flex布局,grid布局,如何实现水平垂直居中,flex布局和grid布局的区别是什么5.&nbsp;了解前端模块化吗?讲述es6模块化,模块的加载顺序是什么6.&nbsp;Array的内置方法有用过哪些吗?push,pop,shift,unshift,slice,splice,map,reduce,join。7.&nbsp;map和forEach的区别是什么8.&nbsp;splice应用于哪些场景9.&nbsp;vue用过吗?vue2还是vue3哪个用的比较多?10.&nbsp;v-for和v-if的优先级是什么11.&nbsp;vue组件之间的通讯用什么12.&nbsp;vue父子组件的生命周期顺序13.&nbsp;事件循环了解吗14.&nbsp;代码看输出&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;num&nbsp;=&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;obj&nbsp;=&nbsp;{num:&nbsp;2&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;obj.fn&nbsp;=&nbsp;(function&nbsp;(num)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.num&nbsp;=&nbsp;num&nbsp;*&nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num++&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;function&nbsp;(n)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.num&nbsp;+=&nbsp;n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num++&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(num)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;})(obj.num)&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;fn&nbsp;=&nbsp;obj.fn&nbsp;&nbsp;&nbsp;&nbsp;fn(6)&nbsp;&nbsp;&nbsp;&nbsp;obj.fn(7)&nbsp;&nbsp;&nbsp;&nbsp;console.log(num)&nbsp;&nbsp;&nbsp;&nbsp;console.log(obj.num)&nbsp;&nbsp;15.&nbsp;反问环节&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;岗位的工作内容:erp?好像是供应商和供应链的中间通道,负责分销管理,铺货。前端vue2,vue3,element-plus&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;实习生参与的工作是新旧项目都会参加吗?新项目用vue3,旧项目vue2,用微前端结合,都需要维护&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;面试官讲述了工作时间,上午9:00-晚上8:00感受:1.&nbsp;对于基础知识掌握的比较少,只了解比较表层的内容,但是深挖原理不知道2.&nbsp;对于js的代码,没有去自己实操运行一下3.&nbsp;在工作和学习中,项目中没有挑战一些难点和突破点,问的时候不知道怎么说
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务