摘要:这是一道朋友在群里发的一道题,我之前不是很懂柯里化,就自己试着写了一下,不知道算不算柯里化,望指教下面是题目写好之后一下代码可以正常运行输入正确我自己的代码我用到了以下知识点扩展运算符传参和扩展运算符相关的数组操作。
这是一道朋友在群里发的一道题,我之前不是很懂柯里化,就自己试着写了一下,不知道算不算柯里化,望指教~ 下面是题目:
function curry() { // your code..... } ================================ //写好之后一下代码可以正常运行输入正确 function add(a, b, c) { return a + b + c; } let addEx = curry(add); console.log(addEx(1,2,3) === 6); console.log(addEx(1,2)(3) === 6); console.log(addEx(1)(2,3) ===6); console.log(addEx(1)(2)(3)===6); function multi(a, b, c, d) { return a * b * c * d } const multiEx = curry(multi) console.log(multiEx(2, 3, 4, 5) === 120) //=>true console.log(multiEx(2, 3, 4)(5) === 120) //=>true console.log(multiEx(2, 3)(4, 5) === 120) //=>true console.log(multiEx(2)(3)(4)(5) === 120) //=>true我自己的代码:
function curry(fn) { let len = fn.length; let arr = []; let getCurry = function () { return function () { let next = [...arguments]; if (len !== arr.length + next.length) { arr.push(...next); return getCurry(); } else { let result = fn.apply(null, [...arr,...next]) arr = [] return result } } } return getCurry() }
我用到了以下知识点:
扩展运算符传参和扩展运算符相关的数组操作。
由于是连环调用函数,我用所有调用函数的参数个数来判断。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/94467.html
摘要:忍者秘籍一书中,对于柯里化的定义如下在一个函数中首先填充几个参数然后再返回一个新函数的技术称为柯里化。回到我们的题目本身,其实根据测试用例我们可以发现,函数的要求就是接受单一函数,例如但是与柯里化不同之处在于,柯里化返回的一个新函数。 欢迎大家再一次来到我的文章专栏:从面试题中我们能学到什么,各位同行小伙伴是否已经开始了悠闲的春节假期呢?在这里提前祝大家鸡年大吉吧~哈哈,之前有人说...
摘要:函数柯里化在函数式编程中,函数是一等公民。函数柯里化的主要作用和特点就是参数复用提前返回和延迟执行。可能在实际应用场景中,很少使用函数柯里化的解决方案,但是了解认识函数柯里化对自身的提升还是有帮助的。 最近在整理面试资源的时候,发现一道有意思的题目,所以就记录下来。 题目 如何实现 multi(2)(3)(4)=24? 首先来分析下这道题,实现一个 multi 函数并依次传入参数执行,...
摘要:函数柯里化关于函数柯里化的问题最初是在忍者秘籍中讲闭包的部分中看到的,相信很多同学见过这样一道和柯里化有关的面试题实现一个函数,使得如下断言能够能够通过简单说就是实现一个求值函数,能够将所有参数相加得出结果。方法返回一个表示该对象的字符串。 函数柯里化 关于函数柯里化的问题最初是在《JavaScript忍者秘籍》中讲闭包的部分中看到的,相信很多同学见过这样一道和柯里化有关的面试题:...
摘要:原题如下写一个方法,当使用下面的语法调用时,能正常工作这道题要考察的,就是对函数柯里化的理解。当参数只有一个的时候,进行柯里化的处理。这其实就是函数柯里化的简单应用。 showImg(https://segmentfault.com/img/bVbopGm?w=620&h=350); 前言 这是前端面试题系列的第 6 篇,你可能错过了前面的篇章,可以在这里找到: ES6 中箭头函数的...
阅读 1209·2021-09-03 10:44
阅读 606·2019-08-30 13:13
阅读 2799·2019-08-30 13:11
阅读 1970·2019-08-30 12:59
阅读 1036·2019-08-29 15:32
阅读 1597·2019-08-29 15:25
阅读 992·2019-08-29 12:24
阅读 1277·2019-08-27 10:58