2008-11-27 9 views
9

Estoy teniendo un problema con la siguiente javascript -acceder a las variables globales dentro de una devolución de llamada

var bVisited = false; 

function aFuncCallBack(somestring) 
{ 
    bVisited = true; 
} 

processingManager.setCallBack(aFuncCallBack); 
processingManager.DoWork(); 

if(bvisited == false) 
    alert("Call back not entered"); 

aFuncCallBack obtiene éxitos en mi caso; Estoy configurando el bVisited a true allí - pero aún cuando verifico la variable después de la llamada DoWork el valor sigue siendo false - No puedo entender cuál es el problema. Busqué algunos hilos pero no encontré nada relevante.

¿Podría alguien arrojar algo de luz sobre por qué este comportamiento y posiblemente qué debo hacer?

Respuesta

12

¿La devolución de llamada se ejecuta de forma asíncrona? Intente agregar un alert() en la devolución de llamada y vea si se dispara antes de su alerta existente.

Si hay algo ámbito raro pasando (no debe ser, pero nunca se sabe) se puede acceder a variables globales utilizando el objeto de ventana: window.bVisited = true;

Editar: Se comprueba bvisited == false en lugar de bVisited == false - esperemos que eso es un error tipográfico en tu pregunta y no en el código!

4

Si processingManager.DoWork(); es asincrónico, es posible que pueda regresar antes de que bVisited se haya configurado.

Además, ha bvisitado en su prueba, no bVisited - ¿Es eso un & pegar desde su código?

0

Como señalaron los otros, JavaScript distingue entre mayúsculas y minúsculas, y las variables no declaradas no están definidas, es decir. 0/falso/nulo por defecto.
Gotcha común con lenguajes dinámicos sin algo así como use strict/option explicit o directivas similares ...

0

siento, es en realidad un error tipográfico en bvisited - y mi pregunta era realmente sobre el almacenamiento de los estados -

que tipo de descubierto el problema para mí después he publicado esta pregunta - el problema se debe a la llamada asincrónica -

como alguien señaló -

> If processingManager.DoWork(); es asincrónico, es posible que pueda regresar antes de que se haya establecido bVisited. >

sí, processingManager.DoWork es una llamada asincrónica - y mis js se ejecuta hasta su finalización antes de bvisited se establece en true a través de una llamada de vuelta -

modo - que crea otra duda en mí - son variables globales visibles en todos los archivos js? significado que decir, como una parte de mi ejecución, tengo dos archivos js -

1.js
// CÓDIGO bVarGlobal1 = true // CÓDIGO

se ejecuta

primera 1.js y luego 2 .js se procesará

aquí, ¿puede 2.j acceder a la variable bVarGlobal1 de alguna manera? (¿Necesitamos prefijar cualquier clase de palabra clave "exportar" a la variable bVarGlobal1 en el 1.js para que la variable sea visible durante toda la vida de la ejecución del programa?)

PD: soy de C/C++ de fondo y nuevo en JavaScript, así que perdón por la palabra clave "exportar" si tal cosa no existe en JS :)

+0

Es posible que desee formular esta pregunta por separado, pero la respuesta corta es sí, todo en el archivo 1 será visible en el archivo 2. – Benry

Cuestiones relacionadas