2014-01-14 213 views
0

我有一個全局變量map,在打開腳本標籤後聲明 - 我也有一個全局變量test_var,在右下方聲明。在初始化函數中,我使用谷歌地圖API創建一個新的谷歌地圖,並將其分配給全局變量地圖。在函數之外,我初始化映射並嘗試console.log(map)和console.log(test_var)。前者返回未定義,後者返回42,但它們都是全局變量,所以我不明白爲什麼映射在初始化函數中賦值之後,調用該初始化函數現在具有未定義的值。全局變量'map'未定義

還有一件事:在控制檯中,如果我嘗試訪問地圖,或者像map.getBounds()這樣的地圖方法,它可以正常工作。問題是,爲什麼不能以編程方式執行此操作,而不僅僅是在控制檯窗口中。由於

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title>Heatmaps</title> 
    <style> 
    //.......some styling.....// 
    </style> 
    <body> 
     /....some html..../ 
    </body> 

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=visualization"></script> 
<script> 
var map; 
test_var = 42; 

var home = new google.maps.LatLng(50, -15) //map is centered somewhere in the atlantic ocean, change later 

function initialize() { 
    var mapOptions = { 
    zoom: 3, 
    center: home, 
    mapTypeId: google.maps.MapTypeId.ROADMAP, 
     disableDefaultUI: true, 
     panControl: false, 
     zoomControl: true, 
     mapTypeControl: false, 
     scaleControl: false, 
     streetViewControl: false, 
     overviewMapControl: false 
    }; 

    var styles = [ 
    { 
    stylers: [ 
     { "gamma": 0.83 }, 
     { hue: "#00ffe6" }, 
     { saturation: -20 } 
    ] 
    },{ 
    featureType: "road", 
    elementType: "geometry", 
    stylers: [ 
     { lightness: 100 }, 
     { visibility: "simplified" } 
    ] 
    },{ 
    featureType: "road", 
    elementType: "labels", 
    stylers: [ 
     { visibility: "off" } 
    ] 
    } 
]; 

    map = new google.maps.Map(document.getElementById('map-canvas'), 
     mapOptions); 

} 

google.maps.event.addDomListener(window, 'load', initialize); 
console.log(test_var); //this works! 
console.log(map); //get undefined error, why????? 

</script> 
    </head> 

</html> 

回答

1

這是因爲你的事件處理程序(功能initialize)還沒有叫,當你調用console.log(map)。嘗試添加console.log(map)到一個按鈕

<input type=button onclick="console.log(map)" value="Test map" /> 
+0

但它怎麼不叫我想'google.maps.event.addDomListener(窗口,「負荷」,初始化)'的說法。此外,我知道按鈕方法將工作,但實際上我想訪問地圖方法(如map.getBounds())在JavaScript中,而不是在控制檯或HTML – user1452494

+0

'addDomListener'不調用該方法。它將事件處理程序附加到您指定的事件('window.onload'),並且只有在該事件中您的方法纔會被調用。嘗試在你的方法內部添加'console.log',你會看到它在你當前的'console.log'調用之後執行。 –