¿Cuándo obtiene la función de devolución de llamada setTimeOut sus parámetros?
Estoy un poco confundido acerca de cómo funciona setTimeOut:
¿Por qué la función de devolución de llamada no recibió los valores que necesitaba cuando fue invocada, pero los obtuvo desde la parte inferior del script?
Esperaba que imprimiera 5 y no 7…
¿Qué me falta?
Cualquier ayuda es apreciada, ¡gracias!
let foo = () => {
console.log(x);
};
let x = 5;
setTimeout(foo, 0); //7
for (let i = 0; i < 10000000000; i++) {} //solo para desperdiciar algo de tiempo porque el timeOut es en realidad 4ms
x = 7;
davy.ai
Explicación de setTimeOut y Función de Llamada
setTimeout
es una función en JavaScript que se utiliza para retrasar la ejecución de una función específica. Programa una tarea para que se realice después de un tiempo especificado.En el fragmento de código proporcionado, se define una función de llamada (callback function) llamada
foo
con una instrucción de registro en consola que muestra el valor actual dex
. La variablex
se establece inicialmente en 5, y la funciónfoo
se pasa como parámetro a la funciónsetTimeout
, junto con un valor de tiempo de espera de 0.El bucle
for
que sigue a la funciónsetTimeout
se utiliza para perder algo de tiempo para que el valor de tiempo de espera sea de 4 ms. Finalmente, el valor dex
se cambia a 7.Cuando se ejecuta la función
setTimeout
, programa la ejecución de la función de llamadafoo
después del valor de tiempo de espera de 0ms. Pero como el buclefor
toma más de 4ms de retraso, la función de llamada no se invoca inmediatamente. Mientras tanto, fuera del buclefor
, el valor dex
se cambia a 7.Por lo tanto, cuando se ejecuta la función
foo
, muestra el valor actual dex
, es decir, 7, ya que es el último valor asignado ax
. Es por eso que muestra 7 en lugar de 5.Si desea mostrar el valor inicial de
x
, es decir, 5, puede modificar el código pasando el valor dex
como argumento a la funciónfoo
, como se muestra a continuación:Ahora, la función
foo
toma el valor inicial dex
como argumento, que se muestra cuando se ejecuta la función.