Very strange Javascript scoping issue
以下变量my_cords在进入谷歌地图功能时未定义,任何人都可以理解为什么并且可能给我一个解决方法吗? 我已经在顶部定义它并将其设置在回调函数中,我已经看到它在全局变量之前工作了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | $(document).ready(function () { var my_cords; var map; function getCareHome() { geocoder = new google.maps.Geocoder(); //var address = document.getElementById("address").value; var address ="address here"; geocoder.geocode( { 'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { my_cords = results[0].geometry.location; } else { alert("Sorry we couldn't locate the carehome on the map:" + status); return false; } }); var myOptions = { zoom: 7, center: my_cords, mapTypeId: google.maps.MapTypeId.ROADMAP } map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); } getCareHome(); }); |
geocoder.geocode是一个异步函数。 设置
将依赖于它的代码移动到该函数内部。
尝试在函数中使用回调。
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | geocoder.geocode( { 'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { createMap(results[0].geometry.location); } else { alert("Sorry we couldn't locate the carehome on the map:" + status); return false; } }); var createMap = function(my_cords) { var myOptions = { zoom: 7, center: my_cords, mapTypeId: google.maps.MapTypeId.ROADMAP } map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); } |
因为
如果在设置