встроенная функция javascript - каковы результаты? - PullRequest
0 голосов
/ 01 декабря 2019

Что возвращает эта функция? Я не знаком с этой номенклатурой.

let x = 2;
let y = 8;
const a = function(b) { return function(c) { return x + y + Math.abs(b) + c; } };

// Statement will go here

const fn = a(x);

Для вышеприведенной функции я понимаю часть x + y, но что за b и c упоминаются во второй половине? Является ли (x) вызовом const a?

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

Ответы [ 3 ]

0 голосов
/ 01 декабря 2019

a является результатом функции, которая принимает аргумент, b. Эта функция возвращает другую функцию, которая принимает аргумент c и возвращает x + y + c плюс абсолютное значение b.

let x = 2;
let y = 8;
const a = function(b) {
  console.log({
    b
  });
  return function(c) {
    console.log({
      c
    });
    return x + y + Math.abs(b) + c;
  }
};

// Statement will go here

const fn = a(x);

fn(12) // will have b=2 and c=12
0 голосов
/ 01 декабря 2019

Похоже на указатель на функцию. function(b) принимает параметр x, который был передан в указатель функции a, этот указатель функции ссылается на function(b), но в отличие от обычных функций, которые немедленно возвращают значение, function(b) возвращает другую функцию function(c), которая, конечно, принимает однупараметр и этот параметр должен быть заполнен при вызове const fn.

Моя теория такова: когда вы вызываете fn, например, fn(3), вы получите результат, эквивалентный 2 + 8 + Math.abs(2) + 3;

Без const fn вы также можете вызвать a как (2) (3) который, как я верю, даст тот же результат.

Надеюсь, это поможет.

0 голосов
/ 01 декабря 2019

То, что вы видите здесь, называется каррингом, что-то связанное, но отличающееся от частичного применения.

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

В этом случае a - это функция, которая возвращает функцию, которая возвращает результат добавления x, y, абсолютного значения b (исходя из вызова ac (исходя из вызова с возвращаемым значением a).

...