地理位置功能参数行为

时间:2015-09-12 00:29:19

标签: javascript google-maps-api-2

我使用谷歌地图api,我注意到了我在JavaScript中不熟悉的程序化行为:

function success(pos) {
  // ...do something with pos.
}

navigator.geolocation.getCurrentPosition(success);

在上面的示例中,似乎成功函数已通过' pos'来自稀薄空气的论证和成功函数不是通过括号在getCurrentPosition参数内调用的。我希望看到这样的事情:

function success(pos) {
  //...do something with pos.
}

var pos = //...something;
navigator.geolocation.getCurrentPosition(success(pos));

我只是不明白这里发生了什么。论证来自何处以及为什么即使用括号调用该函数?

1 个答案:

答案 0 :(得分:0)

这是您将在Javascript中经常看到的功能。它通常被称为回调。缺少括号是因为Javascript允许您将函数视为变量,通常称为“第一类函数”。您正在将success函数传递给getCurrentPosition方法,而您实际上并未调用success方法。

当您致电navigator.geolocation.getCurrentPosition(success);时,您正在向getCurrentPosition函数说明,当您找到该位置时,您希望它调用您提供的功能并将其传递给它。

getCurrentPosition方法将执行以下操作:

function getCurrentPosition(successCallback) {
    var position = loadFromSomewhereThatMayTakeAWhile();
    successCallback(position);
}

getCurrentPosition可能需要几秒甚至几分钟才能获得当前位置。您不希望浏览器在发生这种情况时停止响应。回调允许你说"当这个操作完成后,调用另一个方法来做结果"。然后,浏览器可以继续执行其他操作,并仅在操作完成时执行回调。

jQuery ajax函数使用此回调样式。

var whenSuccessful = function(data, status, xhr){
    console.log('The data was loaded successfully.')
};

var whenFailed = function(xhr, status, error){
    console.log('The request failed!')
};

$.ajax({
  url: "http://myserver.com/some_data.json",
  error: whenFailed, // do this if the request fails for any reason
  success: whenSuccessful // do this if the data was loaded successfully
})