2017-01-27 96 views
0

所以我在使用navigator.geolocation获取经度和纬度并将其存储在全局变量中时遇到了问题。我在不同的地方使用警报来检查JavaScript代码的流程。我发现顺序是1,2,4和3.为什么?我很困惑。JavaScript中执行代码的顺序 - navigator.geolocation

$(document).ready(function() { 
     var latitude; 
     var longitude; 
     alert('1'); 
     if(navigator.geolocation){ 
     alert('2'); 
      navigator.geolocation.getCurrentPosition(function(position){ 
       alert('3'); 
       latitude = position.coords.latitude; 
       longitude = position.coords.longitude; 
       geoCoords(latitude, longitude); 


      }); 
     } 

     alert('4'); 

    }); 
+2

'navigator.geolocation.getCurrentPosition' is asynchronous –

+0

那么这意味着没有必要把它放到全局变量中吗? – DazedNConfused

+1

不需要?没有点更像它 –

回答

4

navigator.geolocation.getCurrentPosition是异步的 - 你进入它作为一个参数的函数是回调函数,这之后getCurrentPosition已成功完成执行。从Mozilla的文档:

navigator.geolocation.getCurrentPosition(success[, error[, options]]) 

的JavaScript代码的回调函数之外的其余部分将继续无需等待回调函数来运行,这就是为什么你看到的1的顺序来执行,2,4, 3.

+0

非常感谢。 – DazedNConfused