2017-09-13 19 views
2

何らかの理由で、ローカル変数sometimeに設定されているとJavaScriptグローバル変数が関数内で未定義になります。 たとえば、以下のサンプルでは、​​localが「undefined」になることがよくあります。 誰かに助言してもらえますか?javascriptグローバル変数が関数内で未定義

私は「local」の値を期待していはfunctionB()functionC()またはdoStringProcessingA()doStringProcessingB()で「グローバル値」です。 「local」の値は「undefined」です。私は他の場所に値を割り当てたり、どこにでもグローバルに未定義を設定したりすることはないと確信しています。

以下のリンクを確認しましたが、関連していないようです。 'Hoisted' JavaScript VariablesWhy a variable defined global is undefined?

関数A()は、HTMLからのonClickイベントで呼ばれていました。

var global; 

function functionA(){ 
    global = "global value"; 
} 

function functionB(){ 
    var local = global;  
    doStringProcessingA(local); 
} 

function functionC(){ 
    var local = global;  
    doStringProcessingB(local); 
} 

<div onclick="functionA()"> 
    <span class="Text">Submit</span> 
</div> 
+3

あなたの 'global'変数はどのような値でもグローバルに割り当てられません。 'functionA'からその値を取得します。最初に 'functionA'を呼び出してから、' global'変数の値を使う他の関数を呼び出してください。 –

+0

あなたの英語を完全に解析することはできません。グローバル変数が定義されていないと言いますか? 「グローバル変数にローカル変数が設定されている場合、グローバル変数にローカル変数の値が割り当てられている場合」または「グローバル変数にローカル変数が割り当てられている場合」を意味しますか?他の多くの言語とは異なり、英語の "set A to B"は、 "Aの値をとり、それをINTO B"にするのではなく、 "Bの値を持つようにAの値を変更する"ことを意味する。 –

+0

functionBとfunctionCまたはdoStringProcessingAとdoStringProcessingBの "local"の値が "global value"であると思います。 "local"の値は "undefined"です。私は他の場所に値を割り当てたり、どこにでもグローバルに未定義を設定したりすることはないと確信しています。 –

答えて

0

あなたはこの

Var global = "text"; 
function functA{ 
    Var lol = global; 
    dostringprocess(local); 
    } 

を試すことができます私はあなたのコードでは、それはFunctioA、 からローカル変数を取っても、あなたは二つの方法

1で確認することができると思います)、オープンコンソールと見ます関数スタック内のすべての関数にいくつかのログメッセージを入れて正確に何を表示するかをログに記録する

2)閉鎖を使用することができます

0

グローバルな値がfunctionA()の下で定義されているので、関数B()またはfunctionC()を直接呼び出すときに、グローバル変数には値が含まれていません。したがって、global変数..

var global="Earth";      // now it will not give any errror 

function functionA(){ 
    global = "global value"; 
} 

function functionB(){ 
    var local = global;  
    doStringProcessingA(local); 
} 

function functionC(){ 
    var local = global;  
    doStringProcessingB(local); 
} 

<div onclick="functionA()"> 
    <span class="Text">Submit</span> 
</div> 
+0

"未定義"を取得することはありませんが、これらの関数では "グローバル値"を取得することは確実ではありません。それは "未定義"の代わりに "地球"を得るかもしれません。 –

関連する問題