我有C ++和Java背景。我在理解用JavaScript调用函数方面遇到了一些麻烦。
下面是我的代码示例,我声明了变量lon和lat#4。并在第5行和第6行分配它的值。
这是我的问题,我在#1上调用了writeToTes()并且它有效。但是当我在#2或#3上放置writeToTes()时,lon和lat是空的,就像从未分配过一样。这是为什么?
根据我的逻辑,我们已经执行if(navigator.geolocation){},lat和lon应该已经分配了,为什么当我调用writeToTes()时lon和lat仍然是空的。
var lon = '',
lat = ''; // #4
$(document).ready(function() {
setLonLat();
});
function setLonLat() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
lat = (position.coords.latitude); //#5
lon = (position.coords.longitude); //#6
writeToTes(); //#place it Here #1
});
//#place it Here #2
}
//#place it Here #3
}
function writeToTes() {
$("#tes").html(lon + " " + lat);
}

答案 0 :(得分:6)
因为getCurrentPosition()
是异步操作。传递给getCurrentPosition()
的函数称为回调函数。在检索当前位置后执行放入此函数的任何代码。
在调用writeToTest()
之后放置getCurrentPosition()
时,它会在getCurrentPosition()
执行完毕之前执行。因此,尚未分配lat
和lon
。
答案 1 :(得分:0)
就像在按钮点击上添加eventhandler
一样。 eventhandler
只会在单击按钮后触发。在这种情况下,当您获得地理位置时,系统会调用eventhandler
或callback
。您的回调的位置包含您的lat
和lon
数据。