Почему функция так работает?

function sum(a) {
  const add = function(b) {
    if (b !== undefined) {
      console.log(b); 
      a = a + b;
      return add;
    }
    return a;
  }
  return add;
}

console.log(sum(1)(2)(3)(4)()) //10

Почему sum возвращает 10, если b нигде не передается? Почему console.log(b) возвращает 2,3,4? Где 1 потрялся?


Ответы (1 шт):

Автор решения: Алексей Шиманский

Функция sum возвращает другую функцию, где имя параметра b. Первый вызов sum с аргументом (1) вернёт функцию add. Последующие вызовы (2),(3),(4) будут уже этого самого метода. У которого у параметра имя b и будет принимать эти самые значения


После первого вызова функции sum мы получили фактически вот это

function add(b) {
    if (b !== undefined) {
      console.log(b); 
      a = a + b;
      return add;
    }

    return a;
}

На самом деле даже это не всё. Но пока бОльшее знать не нужно

→ Ссылка