我想按順序執行函數,但我經常在console中獲取1,3,4,2。因爲ltt和lott在函數getDistanceFromLatLonInKm中保持爲0。任何想法?提前致謝。Javascript函數順序
var ltt=0;
var lott=0;
if (navigator.geolocation){
navigator.geolocation.getCurrentPosition(ajmo);
console.log('1');
}
function ajmo(position){
console.log('2');
window.ltt=position.coords.latitude;
window.lott=position.coords.longitude;
document.write(window.ltt);
}
console.log('3');
document.write(window.ltt);
document.write("kurac:" + getDistanceFromLatLonInKm(45.332497,14.436384));
function getDistanceFromLatLonInKm(lat1,lon1){
console.log('4');
//second
var R = 6371; // Radius of the earth in km
var dLat = deg2rad(ltt-lat1); // deg2rad below
var dLon = deg2rad(lott-lon1);
var a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(ltt)) *
Math.sin(dLon/2) * Math.sin(dLon/2)
;
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c; // Distance in km
return d;
}
function deg2rad(deg) {
return deg * (Math.PI/180)
}
'geolocation.getCurrentPosition'是異步的,這就是爲什麼3在2和4之前觸發。 – Andy
有沒有辦法讓它同步或在之前觸發? – Axon
JavaScript通常是異步的,所以簡單地編寫代碼並不能確保它的運行方式,您必須使用適當的回調函數。當你使用回調函數時,你要確保它們中的代碼在它們準備運行之前不會運行。 – Jonast92