Encontré funciones de devolución de llamada en JS y las encontré realmente sorprendentes. Aunque hay algo sobre cómo se comportan las devoluciones de llamada que no puedo entender. Ejemplo:
function add(num1, num2){ return num1 + num2; } function displaySum(num1, num2, callback){ let a = callback(num1, num2) console.log(a); } setTimeout(displaySum(3,5,add), 3000); // This displays the result instantlyY en un caso similar
function displayText(text){ console.log('HEY JS'); } setTimeout(displayText, 3000) //This seems to workNo soy capaz de entender por qué está sucediendo esto?
El problema es que está llamando directamente a la función dentro de setTimeout . Esa función se invoca y no se devuelve nada.
setTimeout espera que se ejecute una función después de que expire el temporizador. Solo debe especificar el referente a esa función.
setTimeout(displaySum(3,5,add), 3000); Con la declaración anterior, está llamando instantáneamente a la función displaySum con 3 parámetros. Es por eso que puedes ver el resultado al instante. Esta función no tiene un valor de retorno, por lo que no hay ningún evento que deba activarse después del intervalo especificado.
Reemplace eso con
setTimeout(() => displaySum(3, 5, add), 3000); Aquí, la función arraw devuelve displaySum(3, 5, add) , y esta función se llamará después del intervalo especificado.
function add(num1, num2) { return num1 + num2; } function displaySum(num1, num2, callback) { let a = callback(num1, num2) console.log(a); } setTimeout(() => displaySum(3, 5, add), 3000);