haizlin / fe-interview

前端面试每日 3+1,以面试题来驱动学习,提倡每日学习与思考,每天进步一点!每天早上5点纯手工发布面试题(死磕自己,愉悦大家),6000+道前端面试题全面覆盖,HTML/CSS/JavaScript/Vue/React/Nodejs/TypeScript/ECMAScritpt/Webpack/Jquery/小程序/软技能……
http://www.h-camel.com
MIT License
25.41k stars 3.25k forks source link

[js] 第139天 说下你对柯里化函数(currying)的理解,它有什么运用场景? #1142

Open haizhilin2013 opened 5 years ago

haizhilin2013 commented 5 years ago

第139天 说下你对柯里化函数(currying)的理解,它有什么运用场景?

NicholasBaiYa commented 5 years ago

函数柯里化指的是将能够接收多个参数的函数转化为接收单一参数的函数,并且返回接收余下参数且返回结果的新函数的技术。 eg:

const add = x => y => x + y
let add5 = add(5)
add5(5) // 10
add(1)(2) // 3
EmiyaYang commented 5 years ago

Function.prototype.length 返回形参个数, 这个知识点我现在才知道?

mwangshuxin commented 5 years ago

太菜了 之前我都木有了解过 😂

haizhilin2013 commented 5 years ago

@mwangshuxin 正好借此机会学习下

ustchcl commented 4 years ago

柯里化指的是将一个接受多个参数的函数转为一次只接受一个参数的函数,将已接受的参数保存起来,返回接受剩余参数的新函数,当传入参数个数之和等于被柯里化的原函数的参数个数,返回计算结果。 这样可以使得函数变成只接受一个参数,返回一个值的状态,降低了编程复杂性。

function curry (fn) {
  const ctx = this;
  function inner (...args) {
    if (args.length === fn.length) 
    {
        return fn.call(ctx, ...args);
    }
    return (...innerArgs) => inner.call(ctx, ...args, ...innerArgs);
  }
  return inner;
}

不是降低复杂性哦. 最早Curry是为了解决多参数函数在lamda演算里面表达问题. 现在js里面使用主要是为了函数复用.

xiaoqiangz commented 2 years ago

柯里化函数是将一个接收多个参数的函数变成接收单一参数的函数,并且返回接收余下参数且返回结果的新函数。 使用场景:避免每次调用重复传参。