JavaScript范围和函数调用

时间:2017-02-27 21:00:03

标签: javascript

我有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);
}




2 个答案:

答案 0 :(得分:6)

因为getCurrentPosition()是异步操作。传递给getCurrentPosition()的函数称为回调函数。在检索当前位置后执行放入此函数的任何代码。

在调用writeToTest()之后放置getCurrentPosition()时,它会在getCurrentPosition()执行完毕之前执行。因此,尚未分配latlon

答案 1 :(得分:0)

就像在按钮点击上添加eventhandler一样。 eventhandler只会在单击按钮后触发。在这种情况下,当您获得地理位置时,系统会调用eventhandlercallback。您的回调的位置包含您的latlon数据。