Javascript在函数之间传递参数

时间:2014-05-06 17:18:04

标签: javascript jquery function geolocation arguments

这段代码工作正常,但我希望函数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)
}

3 个答案:

答案 0 :(得分:1)

您将关闭传递给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));
}

答案 1 :(得分:0)

我会将它们作为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;
}

答案 2 :(得分:-1)

你能做到这一点。

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

从上面的示例中,position变量未从此代码行传递navigator.geolocation.getCurrentPosition(ajmo);

这就是我如何添加参数