2011-06-25 13 views
10

Me pregunto cómo funciona el bucle de eventos en javascript, Estoy usando node.js pero supongo que la misma pregunta se aplica a los navegadores.javascript event-loop pregunta

tengo alguna llamada asincrónica (digamos setTimeout o $.ajax o fs.readFile) y después de un rato, el evento de bucle se ejecuta el callback

ahora cuando el callback es la silla eléctrica, lo que ocurre detrás de la escena? ¿Revive la pila que usó cuando invocó las cosas asincrónicas?

En la práctica, ¿cuál es el contexto/este en el que está viviendo la devolución de llamada? y cómo funciona?

edit: gracias, veo ... solo un problema más, ¿cómo el ciclo de eventos "recuerda" el alcance de una devolución de llamada?

+1

No. JavaScript no revive la pila. Lea sobre cómo funciona el cierre. – Nican

+1

Esto podría ser útil: (http://stackoverflow.com/questions/183214/javascript-callback-scope). Y para una función jQuery relevante: (http://api.jquery.com/jQuery.proxy/) –

Respuesta

2

JavaScript usa ámbito de funciones, las reglas de alcance son las mismas en todos los entornos JS. Como Nican mencionó entender el cierre es importante para saber qué hay disponible en su alcance actual.

Básicamente, una función "recuerda" el entorno en el que se definió. Por lo tanto, si utiliza una función anónima en línea para su devolución de llamada, tendrá acceso a todas las variables que están disponibles para su función primaria y todo lo que se le pase como argumento.

Unos pocos recursos con respecto a los cierres y el alcance de JavaScript:

de Stoyan Stefanov libro Orientado a Objetos de JavaScript hace un gran trabajo explicando el alcance en JavaScript y cómo funciona el lexical scoping de funciones (ver capítulo 4). Recomendaría el libro a cualquiera que sea serio acerca de la programación de JS.

+0

¿cómo el bucle de eventos "recuerda" el alcance de una devolución de llamada? –

+1

@browsingLoops: la devolución de llamada recuerda el alcance mismo. Tras la función * definición *, la función hereda la cadena de alcance de la función externa (si está presente). Eche un vistazo a la [especificación] (http://ecma262-5.com/ELS5_HTML.htm#Section_13). Para la declaración de la función dice: * "Devuelve el resultado de crear un nuevo objeto Function como se especifica en 13.2 con los parámetros especificados por' FormalParameterListopt', y el cuerpo especificado por 'FunctionBody'. ** Pasa el' VariableEnvironment' del contexto de ejecución en ejecución como el 'Alcance'." *** –

0

Hay una buena herramienta llamada Javascript Loupe creado por Philip Roberts que le ayudará a entender cómo de JavaScript llamada pila/evento y intereact bucle/respuesta con cada other.Write alguna pieza de código JavaScript en el editor y tratar de ejecutarlo.