Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

183
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda