簡體   English   中英

Javascript在函數之間傳遞參數

[英]Javascript passing arguments between functions

這段代碼工作正常,但我希望函數getLocation具有2個參數,這些參數傳遞給函數ajmo中的函數getDistanceFromLatLonInKm。我想要這樣做,因為在此示例中,getDistanceFromLatLonInKm具有2個硬編碼參數,並且我想要變量。

有任何想法嗎?

提前致謝。

 getLocation();

function getLocation() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(ajmo);
  }
}

function ajmo(position) {
  lat = position.coords.latitude;
  lng = position.coords.longitude;
  alert('kurac:' + getDistanceFromLatLonInKm(45.332497, 14.436384, lat, lng));
}

function getDistanceFromLatLonInKm(lat_origin, lon_origin, lat_pos, lon_pos) {
  var R = 6371;
  var dLat = deg2rad(lat_pos - lat_origin);
  var dLon = deg2rad(lon_pos - lon_origin);
  var a = 
    Math.sin(dLat / 2) * Math.sin(dLat / 2) +
    Math.cos(deg2rad(lat_origin)) * Math.cos(deg2rad(lat_pos)) * 
    Math.sin(dLon / 2) * Math.sin(dLon / 2)
    ; 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  var d = R * c;
  return d;
}

function deg2rad(deg) {
  return deg * (Math.PI/180)
}

您將閉包傳遞給getCurrentPosition

function getLocation(lat, lon) {
  document.write(lo);
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function(p) {
      ajmo(p, lat, lon);
    });
  }
}

匿名函數將捕獲latlon的值,並將它們傳遞給ajmo。

然后, ajmo將如下所示:

function ajmo(position, originalLat, originalLon) {
  lat = position.coords.latitude;
  lng = position.coords.longitude;
  alert('kurac:' + getDistanceFromLatLonInKm(originalLat, originalLon, lat, lng));
}

我會將它們作為具有lat / lng鍵的對象:

// pass the object in to getLocation
getLocation({lat: 45.332497, lng: 14.436384});

function getLocation(origin) {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(function (position) {

      // pass both the position and the origin to ajmo
      ajmo(origin, position);
    });
  }
}

function ajmo(origin, position) {

  // declare your lat/lng vars properly
  var lat = position.coords.latitude;
  var lng = position.coords.longitude;

  // pass in origin as the first parameter
  alert('kurac:' + getDistanceFromLatLonInKm(origin, lat, lng));
}

function getDistanceFromLatLonInKm(origin, lat_pos, lon_pos) {
  var R = 6371;

  // Then just use dot notation to access the origin object
  var dLat = deg2rad(lat_pos - origin.lat);
  var dLon = deg2rad(lon_pos - origin.lon);
  var a = 
    Math.sin(dLat / 2) * Math.sin(dLat / 2) +
    Math.cos(deg2rad(origin.lat)) * Math.cos(deg2rad(lat_pos)) * 
    Math.sin(dLon / 2) * Math.sin(dLon / 2)
   ; 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  var d = R * c;
  return d;
}

你能做到這一點嗎?

function getLocation(param1, param2) {
  document.write(lo);
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(ajmo(null, param1, param2));
  }
}

function ajmo(position, param1, param2) {
  lat = position.coords.latitude;
  lng = position.coords.longitude;
  alert('kurac:' + getDistanceFromLatLonInKm(param1, param2, lat, lng));
}

從上面的示例中,未從此行代碼navigator.geolocation.getCurrentPosition(ajmo);傳遞position變量navigator.geolocation.getCurrentPosition(ajmo);

那就是我如何添加參數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM