2016-12-15 22 views
0

私のgmapオブジェクトの新しいインスタンスを作成するHTMLファイルにスクリプトセクションがあります。関数initMap()の外に変数gMapは定義されていませんが、関数の外で宣言しました。JavaScript変数が関数の外で定義されていません

var gMap; 
function initMap() { 
    gMap = new gmap({ 
     //some Properties 
    }); 
    console.log(gMap); //gMap is defined 
} 
console.log(gMap); //gMap is undefined 

関数は次のように呼び出されます。

<script async defer 
    src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap"> 
</script> 

私も$(document).readyの代わりに、GoogleのAPIコールバックを通してそれを呼び出してみましたが、それは何も変わっていません。

+1

gmapを関数の外にログオンすると、何も設定されていません。それが設定されるのは、initMapを呼び出すときだけです。関数の外にあるjavascriptは、ページが読み込まれたときに実行されます。 – jordaniac89

+0

plunkrへのリンクや、問題のMINIMALISTの例を掲載することができます。 – gh9

答えて

0

正しいですが、Googleコールバックはconsole.log()の後に実行されています。

だから何が起こっているのか

  1. あなたはgMap VARを宣言しています。
  2. 次に、あなたが出力次にgmap
  3. をごInitMap機能
  4. を作成して、Googleはあなたのコールバック関数を呼び出しています。したがって、あなたの関数のときに出力gmap外、それはあなたがこの

    $(document).ready(function(){ 
    var gMap; 
    function initMap() { 
        gMap = new gmap({ 
         //some Properties 
        }); 
        console.log(gMap); //gMap is defined 
    } 
    console.log(gMap); //gMap is undefined 
    } 
    

    を行う場合は、gmapをログに記録される前に、何もinitMapを呼び出していないので、あなたはまだ、未定義を取得します

定義されていません。試してログをとる前に何かにgMapする必要があります。

以下のコードは、あなたが必要とする作業コードを与えるために何を使用しているのかを知らずにgMapを正しく読み込みます。

$(document).ready(function(){ 
    var gMap = new gmap({}); 
    console.log(gMap); //gMap is defined 

}

+0

私の問題は、htmlセクションで 'gMap'を使いたいということです(' onClick = "gMap.function_name()" ')。クリックが行われると、 '' NiMap''は既に呼び出されていますが、 'gMap'はまだ定義されていません。( 関数外では定義されていないと思いました。 – maidi

1

gMapが存在していますが、初めてconsole.logでそれを呼び出すときに、関数の外で、任意の値を割り当てることはありませんので、あなたが未定義得ます。 initMap()に電話するまで - gMapには値(またはあなたのケースのプロパティ)が割り当てられます。あなたの関数を呼び出す前に、あなたは未定義を取得したくない場合は、「外部の関数」スコープにそれにいくつかの値を割り当てる必要があります、このようなこの簡単な例として

var gMap = 'im not undefined'; 
function initMap() { 
    gMap = 'im still not undefined'; 
    console.log(gMap); //gMap is defined 
} 
console.log(gMap); 
initMap(); 
console.log(gMap); 

ウィル次の出力が生成されます。

"im not undefined" //outside call 
"im still not undefined" //inside function call 
"im still not undefined" //second outside call 
1

私はあなたがその関数を呼び出さなかったことが原因だと思います。それを記録する前に関数を呼び出して、値を割り当てておく必要があります。

EG:

var gMap; 
function initMap() { 
    gMap = new gmap({ 
     //some Properties 
    }); 
    console.log(gMap); //gMap is defined 
} 
console.log(gMap); //gMap is undefined 
initMap(); 
console.log(gMap); //gMap is defined 

希望に役立ちます!

関連する問題