2012-03-07 3 views
0

Pourquoi MM_SYSTEM_RESTART_SECONDSundefined dans l'extrait suivant?Une variable javascript définie en dehors d'une fonction est 'non définie' dans la fonction

Si var MM_SYSTEM_RESTART_SECONDS = 40; est mis dans la fonction, alors MM_SYSTEM_RESTART_SECONDS est 40, mais si en dehors de la fonction, alors MM_SYSTEM_RESTART_SECONDS est toujours undefined.

var MM_SYSTEM_RESTART_SECONDS = 40; 


function wait_until_MM_restarts() 
{ 
    restart_timeout_start_seconds = get_cookie("restart_timeout_start_seconds") 
    elapsed_restart_seconds = elapsed_seconds(restart_timeout_start_seconds) 
    append_debug_message(elapsed_restart_seconds + "/" + MM_SYSTEM_RESTART_SECONDS) 
    if(elapsed_restart_seconds > MM_SYSTEM_RESTART_SECONDS) 
+3

Il ne devrait pas être. Je peux penser à des choses qui pourraient causer cet effet ... mais je devrais voir le reste de la fonction à raconter. C'est généralement une bonne idée de fournir des extraits de code ** qui peuvent être exécutés ** pour démontrer le problème. – Quentin

+0

Je pense que vous devez fournir plus de contexte. Mieux, créez une http://jsfiddle.net/ demo. –

+0

J'ai tendance à éviter les globals. Je comprends votre intérêt pour ce qui se passe, c'est une bonne question (+1). Cependant, je passerais MM_SYSTEM_RESTART_SECONDS dans la fonction wait_until_MM_restarts() en tant que paramètre. –

Répondre

2

Ceci m'a juste mordu. Si vous appelez la fonction avant/au-dessus de la déclaration de variable, la variable peut être indéfinie.

Par exemple

f("before"); 

var value = 99; 
function f(msg) 
{  
    alert("msg=" + msg + " value=" + value); 
} 

f("after"); 

résultats dans:

msg=before value=undefined 
msg=after value=99 

http://jsfiddle.net/qUhQV/4/