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

Created on 1 Sep 2019  ·  6Comments  ·  Source: haizlin/fe-interview

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

js

Most helpful comment

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

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;
}

All 6 comments

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

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

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

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;
}

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

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

@mwangshuxin 正好借此机会学习下

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

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里面使用主要是为了函数复用.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

haizhilin2013 picture haizhilin2013  ·  3Comments

undefinedYu picture undefinedYu  ·  3Comments

haizhilin2013 picture haizhilin2013  ·  3Comments

haizhilin2013 picture haizhilin2013  ·  3Comments

haizhilin2013 picture haizhilin2013  ·  3Comments