javascript - sum(2)(3) 和 sum(2, 3) 两者的共同解决方案是什么

标签 javascript currying

我在采访中被问到这个问题。

对于柯里化(Currying)风格的 sum(2)(3)

sum(a) {
  return (b) {
    return a + b;
  }
}

求和 (2, 3)

sum(a, b) {
  return a + b;
}

有没有可以同时使用的通用函数

最佳答案

这是一个可以从任何非柯里化(Currying)函数创建广义柯里化(Currying)函数的函数。它是在不使用任何 ECMAScript 6 语法的情况下编写的。无论原始函数期望的参数数量或提供给每个部分应用程序的参数数量如何,这都有效。

function sum (a, b) {
  return a + b;
}

function product (a, b, c) {
  return a * b * c;
}

function curry (fn) {
  return function partial () {
    return arguments.length >= fn.length
      ? fn.apply(this, arguments)
      : partial.bind.apply(partial, [this].concat(Array.prototype.slice.call(arguments)));
  };
}

var s = curry(sum);

console.log(s(1, 2));
console.log(s(1)(2));
console.log(s()()(1)()()(2));

var p = curry(product);

console.log(p(2, 3, 4));
console.log(p(2)(3)(4));
console.log(p()()(2)()()(3, 4));

关于javascript - sum(2)(3) 和 sum(2, 3) 两者的共同解决方案是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58191104/

相关文章:

macros - 使用宏在 Scheme 中柯里化(Currying)函数

Scala 实例 - 柯里化(Currying)问题

Javascript/Jquery 解析 Json 请求

javascript - 为什么在 console.log 之后没有调用 Javascript

javascript - Knockout.js - 仅针对一个 View 模型属性将 insertMessages 设置为 false

Haskell 函数应用和柯里化(Currying)

Javascript Curry 函数对这段代码有好处吗?

javascript - jQuery 按钮只能工作一次

javascript - 如何用回调包装 promise ?

javascript - 有人可以向我解释这个 JavaScript 函数的流程吗? (关闭概念)