Qué sucede cuando la devolución de llamada del nodo setTimeout se vuelve nula

Tengo una pregunta sobre las devoluciones de llamada. Tengo un objeto cuya función se usa como devolución de llamada setTimeout y ese objeto se puede eliminar antes de que se active la devolución de llamada. ¿El nodo sabrá que no debe llamarlo cuando se agote el tiempo de espera o mantendrá una referencia y lo llamará de todos modos?

preguntado el 21 de mayo de 12 a las 19:05

Sin una muestra de código, solo podemos adivinar. Pero yo diría que probablemente seguirá disparando. Eliminar la referencia en el objeto no "eliminará" la función. -

¿Has intentado escribir algún código de demostración por ti mismo? Esto parece algo que debería ser bastante simple de hacer y probablemente será más útil. -

Sí, creo que un poco de experimentación debería aclarar esto. -

@krojew Una vez que haya hecho eso, vuelva a publicarlo aquí como una respuesta con cualquier otra cosa que descubra para los viajeros posteriores que terminen aquí. -

2 Respuestas

Hice algunas pruebas y parece que el nodo mantiene una referencia al objeto y activa la devolución de llamada.

contestado el 23 de mayo de 12 a las 18:05

Después de "eliminar", el objeto no se elimina necesariamente, solo está eliminando su referencia. El método seguirá siendo invocable.

> cat test.js
var a = {                                                                                                                                                                                          
    method: function() {
        console.log('a' + a.property)   
    },
    property: '1'
}
setTimeout(a.method, 1000);
delete a;

> node test.js                                                                                                                                                                        
a1

contestado el 21 de mayo de 12 a las 21:05

Ese 'borrar' no está haciendo nada. - David

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.