传递函数作为参数

时间:2017-07-07 19:00:47

标签: javascript function geolocation

我正在教自己javascript,我尝试过的其中一个练习对我来说毫无意义。

在下面的代码中,'position'是必须定义的参数。但是,当我将函数displayLocation作为参数传递给navigator.geolocation.getCurrentPosition时,代码执行完美,尽管没有传递任何参数。当我在没有coords.longitude参数的控制台中尝试position时,它不起作用。

如果没有定义的参数,代码如何工作?

function displayLocation(position)
{
  var latitude = latitude.coords.latitude;
  var longitude = position.coords.longitude;
  var div = document.getElementById("location");
  div.innerHTML = latitude + " " + longitude;
}

navigator.geolocation.getCurrentPosition(displayLocation);

4 个答案:

答案 0 :(得分:0)

  

当我在没有位置的控制台中尝试coords.longitude时   论证,它不起作用......

     

如果没有定义的参数,代码如何工作?

JavaScript中的函数参数是可选的 如果您未通过它,则其值为undefined。 所以,是的,函数接受缺少参数position的调用,但position.coords将不可用。

答案 1 :(得分:0)

navigator.geolocation.getCurrentPosition(displayLocation);使用Position的实例调用您的函数,记录为here

请注意,displayLocation不是立即调用,而是延迟调用。这就是您将其作为回调函数传递的原因。

答案 2 :(得分:0)

当你做什么时

navigator.geolocation.getCurrentPosition(displayLocation);

是您正在调用navigator.geolocation.getCurrentPosition,并为其提供函数displayLocation的句柄。你不能说没有参数就会调用displayLocation。这取决于getCurrentPosition对该句柄的作用。它的作用是创建一个位置对象,然后调用你给它的函数,并将该对象作为参数。更简洁,getCurrentPosition调用displayLocation作为参数创建了一个位置对象。

答案 3 :(得分:0)

让我们来看看Geolocation.getCurrentPosition。必需参数success回调函数

Geolocation.getCurrentPosition(displayLocation)的内部工作方式大致如下:

function getCurrentPosition(callback, ...){

  var positionGCP;
  ...
  ...

  positionGCP = *someposition*;
  // done getting current position

  callback(positionGCP) 
  //passed in function gets called back!
}

,最后一行(callback(positionGCP))自displayLocation(positionGCP)起真正运行callback == displayLocation

这有意义吗?

以下链接可能有所帮助: Passing parameters to a callback function