2012-03-07 2 views
0

Почему MM_SYSTEM_RESTART_SECONDSundefined в следующем фрагменте?Переменная javascript, определенная вне функции, является «неопределенной» в функции

Если var MM_SYSTEM_RESTART_SECONDS = 40; помещается внутри функции, то MM_SYSTEM_RESTART_SECONDS является 40, но если за пределами функции, то MM_SYSTEM_RESTART_SECONDS всегда 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

Это не должно быть. Я могу думать о вещах, которые могли бы вызвать этот эффект ... но нужно было бы увидеть остальную часть функции, чтобы рассказать. Обычно рекомендуется предоставлять фрагменты кода, которые ** могут быть запущены **, чтобы продемонстрировать проблему. – Quentin

+0

Я думаю, вам нужно предоставить еще несколько контекстов. Лучше создайте демо-версию http://jsfiddle.net/. –

+0

Я стараюсь избегать глобальных привязок. Я понимаю ваш интерес к тому, почему это происходит, это хороший вопрос (+1). Тем не менее, я передал бы MM_SYSTEM_RESTART_SECONDS в функцию wait_until_MM_restarts() в качестве параметра. –

ответ

2

Это просто укусило меня. Если вы вызываете функцию до/над объявлением переменной, переменная может быть неопределенной.

Например

f("before"); 

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

f("after"); 

приводит:

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

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

Смежные вопросы