【问题标题】:JavaScript: Multiple arguments [closed]JavaScript:多个参数[关闭]
【发布时间】:2018-05-15 22:27:30
【问题描述】:

举例说明如何在 JavaScript 中使用“currying”:

const component = (argument1) => (argument2) => {
   // Do something
}

【问题讨论】:

  • 可能想看看currying
  • 这是一个主要基于意见的问题,因为您将获得很多基于经验等的意见。因此,这问题应该结束了。
  • 这里是这种用法的一个例子,但我不明白它的重要性是什么:youtu.be/…
  • @CRice 谢谢。这正是视频中使用的术语
  • 你可以说几乎所有的抽象。为什么我们需要函数?为什么我们需要对象?为什么我们不都在 Brainf*ck 中完成所有工作。如果您曾经使用过Array.prototype.map 并希望所有元素都增加一个值,并传递给它一个箭头函数,这很好。如果您看到您在几个地方执行相同的操作,您可能希望将创建该函数抽象为一个函数,该函数接受不同的值并返回一个您可以传递给map 的函数。好处是您可以为该操作命名,而作为箭头函数,它可能不会显示意图。

标签: javascript function lambda currying


【解决方案1】:

这就是所谓的函数柯里化。它对于实现装饰器模式非常有用。

例如,假设我们从一个简单的函数add 开始。

const add = (a, b) => a + b;

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

现在,假设我们要添加两个数字,但每次都添加十。

我们可以这样做:

const add = (a, b) => a + b + 10;

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

但是,我们失去了原来的功能。

所以我们使用函数柯里化来做这两件事:

// We keep the original add function
const add = (a, b) => a + b;

// And create another function that returns the modified function
const addTen = (addFunction) => (a, b) => 10 + addFunction(a, b);

// then we store the new function in a different variable
const addPlusTen = addTen(add);

// ...and call the returned function

console.log(add(1, 2));
console.log(addPlusTen(1, 2));

// This becomes useful when we need to make an addPlusFive, addPlusSix and addPlusSeven functions:

const addFive = (addFunction) => (a, b) => 5 + addFunction(a, b);
const addSix = (addFunction) => (a, b) => 6 + addFunction(a, b);
const addSeven = (addFunction) => (a, b) => 7 + addFunction(a, b);

const addPlusFive = addFive(add);
const addPlusSix = addSix(add);
const addPlusSeven = addSeven(add);

console.log(addPlusFive(1, 2));
console.log(addPlusSix(1, 2));
console.log(addPlusSeven(1, 2));

【讨论】:

    【解决方案2】:

    在你的代码中有两个箭头函数,一个返回另一个可以帮助你使用闭包来维护状态/范围

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures

    const multiplier = (argument1) => (argument2) => {
       return argument2 * argument1;
    };
    
    const multiples8 = multiplier(8);
    
    console.log(multiples8(5));
    console.log(multiples8(6));
    console.log(multiples8(7));

    【讨论】:

      【解决方案3】:

      您所做的称为链接。

      const add = (a) => (b) => {
          return a + b;
      }
      
      var add5 = add(5); // returns partially applied function
      var result = add5(4); // which can be invoked with its own parameter
      
      console.log(result); // 9
      

      箭头函数提供更简洁的语法,因为如果有一个参数,您可以省略参数周围的括号,如果函数体是单行,您可以省略方括号。我们可以使用常规的 js 函数语法编写相同的代码:

      const add = function(a){
          return function(b){
          return a + b
        }
      }
      

      【讨论】:

        【解决方案4】:

        您的代码有两个嵌套箭头函数的简短版本。这是完整版的外观(带有 return 语句和括号应该看起来更清晰):

        let component = (argument1) => { 
           // console.log(argument1);
           return (argument2) => {
               // console.log(argument2);
           }
        }
        
        component('aa')('bb');
        

        第一个函数(带参数 1)返回 FUNCTION。返回的函数接受参数 2。

        【讨论】:

        • 这不能回答问题
        • @Ele 我更新我的答案
        • 什么是“数组函数”??
        • @charlietfl - 抱歉这是我的打字错误 - 我更新答案
        猜你喜欢
        • 2010-09-15
        • 2021-12-07
        • 1970-01-01
        • 2013-12-14
        • 2014-10-22
        • 1970-01-01
        • 1970-01-01
        • 2020-11-09
        • 1970-01-01
        相关资源
        最近更新 更多