2012-03-07 25 views
0

なぜMM_SYSTEM_RESTART_SECONDSundefinedが次のスニペットにありますか?関数内で定義されたjavascript変数が関数内で '未定義'です

var MM_SYSTEM_RESTART_SECONDS = 40;が関数内に置くされている場合、MM_SYSTEM_RESTART_SECONDS40ですが、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/

関連する問題