正在定义的函数? -JS

时间:2017-01-26 18:48:12

标签: javascript function google-maps

我正在查看Google maps API指南,并注意到此页面上的演示:https://developers.google.com/maps/documentation/javascript/marker-clustering使用了initMap()中定义的函数,显然没有实际调用它们。我能找到的唯一相关信息是人们在定义或传递变量时错误地在函数末尾添加了一个(),但是我没有看到这里发生的事情 - 这些函数是如何执行的?

function initMap() {

  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 3,
    center: {lat: -28.024, lng: 140.887}
  });

  // Create an array of alphabetical characters used to label the markers.
  var labels = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

  // Add some markers to the map.
  // Note: The code uses the JavaScript Array.prototype.map() method to
  // create an array of markers based on a given "locations" array.
  // The map() method here has nothing to do with the Google Maps API.
  var markers = locations.map(function(location, i) {
    return new google.maps.Marker({
      position: location,
      label: labels[i % labels.length]
    });
  });

  // Add a marker clusterer to manage the markers.
  var markerCluster = new MarkerClusterer(map, markers,
      {imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m'});
}

2 个答案:

答案 0 :(得分:0)

答案隐藏在HTML中:

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

请参阅callback参数?这表示Google地图在加载完成后立即调用名为initMap的全局定义函数。

答案 1 :(得分:0)

代码创建新对象,传递现有对象。例如,当声明map时,代码会调用new google.maps.Map(...),并传递document.getElementById('map')Map对象的构造函数创建地图并将其显示在元素内。除非后来添加标记,否则不需要变量。

您实际上可以从上面的代码中移除var markerCluster =,它仍然可以正常工作。

如果您的问题是Google Maps API如何知道如何致电initMap,请参阅Eric的回答。