Функции стрелок ES6, возвращающие разные значения - PullRequest
0 голосов
/ 27 апреля 2018

Я новичок в ES6 и пытаюсь выяснить, в чем разница между этим:

const func1 = (x, y) => x * y * 3

и это:

const func2 = x => y => x * y * 3

Я попытался запустить его и вижу, что func1(1,1) возвращает 3 и func2(1) возвращает 1.

  1. Каковы различия и преимущества одного или другого?
  2. При каких обстоятельствах вы бы использовали func2?
  3. Может кто-нибудь продемонстрировать, как вы будете использовать func2?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Функция два является карри версией функции один. Это означает, что вместо того, чтобы принимать пару аргументов, вы передаете первый аргумент, и он вернет вам новую функцию, которой вы можете передать второй аргумент отдельно.

Функции Curried полезны, среди прочего, для создания частично примененных функций. Так что для вашего примера вы можете использовать эти функции так:

const func1 = (x, y) => x * y * 3
const func2 = x => y => x * y * 3

// Two different calling syntaxes, same result:
console.log(func1(2, 3)) // 18
console.log(func2(2)(3)) // 18, note the call chain: (2)(3).

// This is because func2 returns another function.
// You can use that function to partially apply your operation:
const times6 = func2(2);

// Then you can use that elsewhere:
console.log(times6(3)); // 18
console.log(times6(10)); // 60
0 голосов
/ 27 апреля 2018

const func1 = (x, y) => x * y * 3 - это стандартная функция стрелки , которая переводит на это:

const func1 = function (x,y) {
    return x * y * 3;
}

Принимая во внимание,

const func2 = x => y => x * y * 3 - это функция карри , где у вас есть функция в другой функции, подобной этой:

const func2 = function (x) {
    return function (y) {
       return x * y * 3;
}

И да, как указано ниже в CRice, вы должны вызывать параметры отдельно с помощью func2 следующим образом:

console.log(func2(a)(b));

В отличие от стандарта:

console.log(func1(a,b));

Карринг полезен как в практических, так и в теоретических условиях. В функциональные языки программирования и многие другие, он обеспечивает способ автоматического управления передачей аргументов функциям и исключения. В теоретической информатике это обеспечивает способ изучать функции с несколькими аргументами в более простых теоретических моделях которые предоставляют только один аргумент.

То есть func2 - это функция, которая может использоваться в ситуациях, когда, например, вам необходимо вернуть сообщение «abc», если соблюдены определенные требования, или запустить новую функцию с другой логикой, если начальные требования не выполнены. ,


Цитируемый раздел через - Википедия | Карринг

...