Como obter cadeia arbitrária na chamada de função em javascript? [duplicado]

Esta pergunta já tem uma resposta aqui:

Função variável soma sumária 11 respostas

Eu escrevi código para alcançar

sum(1)(2) //3

o código se parece com:

function sum(a) {

  return function(b) { 
    return a+b
 }

}

Mas não elaborei a segunda pergunta, que é como obter qualquer número arbitrário de chamadas de funções em cadeia como:

sum(1)(2) == 3
sum(5)(-1)(2) == 6
sum(6)(-1)(-2)(-3) == 0
sum(0)(1)(2)(3)(4)(5) == 15

questionAnswers(4)

yourAnswerToTheQuestion