Requisito: implemente uma função add function, chame add(1,2,3)(4)(5,6)() e o resultado de saída é 21
function add() {
res = [...arguments]
return function () {
if (arguments.length === 0) {
return res.toString()//返回最终结果
}
return add([...res, ...arguments].reduce((pre, cur) => pre + cur))
}
}
console.log(add(1, 2, 3)(4)(5, 6)());//21
console.log(add(1, 2, 3)(4)(5, 6)(7)());//28
Como o número de parâmetros é variável toda vez que a função é chamada, considere o uso de argumentos para receber e processar parâmetros. Ao escrever esta pergunta, sempre penso em outra pergunta:
A ideia de usar encerramento + recursão também é a mesma. Através de add(1)(2)(3)(), cada chamada passa um parâmetro por vez, e os parâmetros podem ser recebidos de forma convencional. O código é do seguinte modo:
function add(n) {
if (!n) return res //递归出口
res = n //使用全局变量将n的值保存
return function(n) {
return add(res+n)
}
}
Como as formas das duas perguntas são muito parecidas, tenho pensado em como aplicá-las (bom demais), inclusive não conseguir descobrir onde fica a saída recursiva e, finalmente, soltar as algemas e, de repente, abrir Se você tiver outras idéias e métodos, por favor, obrigado por seu conselho.
Vamos fazer de novo, implemente add()(1,2)(3,4)(7,8,9)()
function add() {
return function () {
res = [...arguments]
return function () {
return arguments.length === 0 ? res.toString() : add()([...res, ...arguments].reduce((pre, cur) => pre + cur))
}
}
}
console.log(add()(1, 2)(3, 4)(7, 8, 9)());//34
Eu sinto que compreendi a maneira sem cérebro de escrever esse tipo de pergunta, então irei para a pergunta ~