const add = (n1, n2, callback) => { setTimeout(() => { const sum = n1 + n2 callback(sum) },2000)} add(1, 4, (sum) => { console.log(sum) // Should print: 5 })Sé que la función setTimeout se registrará en la pila de API de nodo y luego en la cola de devolución de llamada después de que se cumpla el tiempo. mi pregunta es ¿cómo se verá la pila de llamadas cuando se llame a la función 'agregar'? dado que analiza una nueva función. ¿Y cómo se verán la pila de llamadas y la cola de devolución de llamada cuando se llame a la función 'devolución de llamada'?
para cualquiera que vea esta pregunta en el futuro, lo he resuelto. Utilicé las herramientas de desarrollo para el nodo proporcionadas por el navegador Google Chrome para ver todo lo que sucedía detrás de escena. parece que después de que el programa main () finaliza y el temporizador termina, la función de devolución de llamada se llama a la cola de devolución de llamada, y con ella un 'cierre' de la función principal que lo llamó (función 'agregar'), y ese cierre contiene los argumentos proporcionados, incluida la función de flecha 'anónima'. después de calcular la suma, se llama a la función de devolución de llamada y analiza los datos. que luego el 'cierre' extrae la función de flecha de la función principal y la ejecuta utilizando los datos analizados de la devolución de llamada.
¡Espero que esto ayude a cualquiera que tenga una pregunta similar en mente!
Puede verificar la pila de devolución de llamada fácilmente con solo
throw new Error()en la función pasada. Cuando hago eso, parece dar:
Error at .../callback.js:10:8 at Timeout._onTimeout (.../callback.js:4:3) at listOnTimeout (node:internal/timers:557:17) at processTimers (node:internal/timers:500:7)