2016-12-15 192 views
0

我在我的html文件中有一個腳本部分,我創建了我的gmap對象的新實例。函數initMap()之外,變量gMap未定義,儘管我聲明它在函數之外。JavaScript變量undefined功能之外

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,而不是谷歌API的回調,但什麼也沒有改變。

+1

當您將它記錄在函數外時,您尚未將gmap設置爲任何內容。唯一的一次設置是當你調用initMap的時候。當頁面加載時,函數外部的任何JavaScript都會執行。 – jordaniac89

+0

你可以發佈一個鏈接到plunkr或帶有MINIMALIST例子的問題。 – gh9

回答

0

你是對的,google回調函數在console.log()之後運行。

所以發生的是

  1. 您聲明gMap變種。
  2. 然後創建您的InitMap功能
  3. 然後你輸出gmap
  4. 那麼谷歌是調用回調函數。因此,當您在函數的輸出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 
} 

你仍然會得到一個未定義的,因爲沒有什麼在呼喚initMap要登錄gmap之前。你需要gMap之前,你嘗試和記錄它

下面的代碼將正確加載gMap,而不知道你在用它爲難,我給你工作代碼做你所需要的。

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

}

+0

我的問題是我想在html部分使用'gMap'('onClick =「gMap.function_name()」')。點擊完成後'nitMap'已被調用,但'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 

希望幫助!