变量从无处传递到地理位置函数

时间:2015-10-18 12:29:51

标签: javascript

我总是遇到一个问题,理解从空气中传递的并没有在任何地方声明的变量,例如,请参阅下面的脚本,当我试图了解地理位置API时,我可以跨越它:

function geoFindMe() {
  var output = document.getElementById("out");

  if (!navigator.geolocation){
    output.innerHTML = "<p>Geolocation is not supported by your browser</p>";
    return;
  }

  function success(position) {
    var latitude  = position.coords.latitude;
    var longitude = position.coords.longitude;

    output.innerHTML = '<p>Latitude is ' + latitude + '° <br>Longitude is ' + longitude + '°</p>';

    var img = new Image();
    img.src = "https://maps.googleapis.com/maps/api/staticmap?center=" + latitude + "," + longitude + "&zoom=13&size=300x300&sensor=false";

    output.appendChild(img);
  };

  function error() {
    output.innerHTML = "Unable to retrieve your location";
  };

  output.innerHTML = "<p>Locating…</p>";

  navigator.geolocation.getCurrentPosition(success, error);
}

上面的代码可以看作 HERE

现在查看以下内容:

function success(position) {

现在究竟是谁将position变量传递给成功函数?这真让我感到困惑,我在使用jQuery Ajax函数时看到了类似的东西。有人可以解释这个变量的概念是从无从哪里传来的?

2 个答案:

答案 0 :(得分:1)

下面:

navigator.geolocation.getCurrentPosition(success, error);

...您将success传递给getCurrentPosition

在某些时候,getCurrentPosition或其调用的另一个函数会调用success并传递一些参数。

他们不是来自空气,他们来自你的代码所调用的功能。只是其他人写了这个功能。

答案 1 :(得分:1)

成功是callback function

为了理解回调函数的运作方式,必须要理解在JavaScript中,函数是对象。如果我将函数A作为参数传递给函数B,函数B可以在内部调用函数A,并使用在调用函数B时不需要的变量。

回调在异步代码中尤其重要,我不会立即收到函数的答案,但是当我收到答案时想要触发事件。在这种特殊情况下,

navigator.geolocation.getCurrentPosition(success, error);

是函数B.它期望两个函数作为参数。如果函数成功则调用一个,如果函数错误则调用一个。

如果调用成功,getCurrentPosition()的实现将使用描述您尝试检索的CurrentPosition的对象作为参数调用成功回调。

为了进一步解释发生的事情,这里有一个例子:

function callFunctionWithOneAsFirstArg(callback) {
    callback(1);
}

callFunctionWithOneAsFirstArg(function(number) { console.log(number); });

在这种情况下,callFunctionWithOneAsFirstArg()的调用不知道如何设置数字。尽管如此,它可以依赖于库提供的callFunctionWithOneAsFirstArg()将执行预期的行为。

您可能会注意到在javascript中使用回调的另一个示例是当您需要处理外部事件(如点击)时。例如,每当单击一个按钮时,您可能希望触发某个功能。因为您想要延迟调用回调函数,所以当您和仅当单击按钮时,您创建的EventListener将为您调用回调。