Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

188
Visualizações
¿Por qué esta función devuelve ['y', 'e', 's']?

alguien puede explicarme cómo esta función devuelve ['y','e','s'] en lugar de solo la cadena 'yes'???? el valor de num primero será 8, luego la condición else funcionará, luego num será [5,6,7] y nuevamente la condición else funcionará, luego num finalmente se convierte en una matriz vacía [] que completará la condición if, entonces debería regresar 'sí' pero no lo hace!?

 function ABC(num, ...rest) { if (num < 5) { return 'yes'; } else { return [...ABC(rest)]; } }; console.log(ABC(8, 5, 6, 7));

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Cuando num < 5 devuelve yes .

Si el primer argumento no activa eso, el que yes será devuelto a:

 return [...ABC(rest)];

Donde se extenderá y se colocará en una matriz.

about 4 years ago · Juan Pablo Isaza Relatório

0

Cuando realiza una llamada recursiva, tiene [...ABC(rest)] que primero ejecuta la función y luego distribuye su resultado en una matriz. Esto es más claro si añadimos una variable intermedia:

 let recursive_result = ABC(rest); return [...recursive_result];

Lo que pretendías hacer era primero esparcir el rest en los argumentos de la función y luego devolver el resultado directamente:

 let recursive_result = ABC(...rest); return recursive_result;

Al solucionar eso, encontramos otro problema, que es que una vez que la matriz está vacía, la función se llamará sin argumentos, y num será undefined , que todavía no es "menos de 5". Eso significa que nunca se alcanzará la declaración if , y seguiremos recurriendo para siempre (hasta que su motor JS se dé por vencido y genere un error).

Al detectar undefined explícitamente, obtenemos el resultado que esperaba:

 function ABC(num, ...rest) { if (num < 5 || typeof num == 'undefined' ) { return 'yes'; } else { return ABC(...rest); } }; console.log(ABC(8, 5, 6, 7));

about 4 years ago · Juan Pablo Isaza Relatório

0

Si agrega algunos console.log , se vuelve más claro:

 function ABC(num, ...rest) { console.log(`num=`, num, ", rest=", rest) if (num < 5) { console.log(`returning 'yes'`) return 'yes'; } else { console.log(`returning [...ABC(${rest})]`) return [...ABC(rest)]; } }; console.log(ABC(8, 5, 6, 7));

  • Ejecutar 1: num=8 , resto=[5, 6, 7]

Así que entra en else y devuelve [...ABC([5, 6, 7])] . Solo hay un argumento, una matriz. Así que en la ejecución 2:

  • Ejecutar 2: num=[5, 6, 7], resto= []

[5, 6, 7] < 5 ? Falso. Así que va en el else de nuevo. Devuelve [...ABC([])] .

  • Ejecutar 3: num=[] , rest= []

[] < 5 ? Cierto, por extraño que parezca. Entonces ABC([]) devuelve 'yes' .

Pero luego este 'yes' se devuelve a la llamada de función anterior , es decir, [...ABC([])] , que se convierte en [...'yes'] , que es ['y', 'e', 's'] .

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda