Javascript 地理定位函数参数行为

Javascript 地理定位函数参数行为,javascript,google-maps-api-2,Javascript,Google Maps Api 2,我正在使用google maps api,我注意到了一个我在JavaScript中不熟悉的编程行为: function success(pos) { // ...do something with pos. } navigator.geolocation.getCurrentPosition(success); 在上面的示例中,似乎success函数是从稀薄的空气中传递的“pos”参数,而success函数不是通过括号在getCurrentPosition参数中调用的。我希望看到这样的情

我正在使用google maps api,我注意到了一个我在JavaScript中不熟悉的编程行为:

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

navigator.geolocation.getCurrentPosition(success);
在上面的示例中,似乎success函数是从稀薄的空气中传递的“pos”参数,而success函数不是通过括号在getCurrentPosition参数中调用的。我希望看到这样的情况:

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

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

我只是不明白这里发生了什么。参数从何而来,为什么连括号都不调用函数?

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

调用navigator.geolocation.getCurrentPositionsuccess;,您对getCurrentPosition函数说,当它找到位置时,您希望它调用您提供的函数并传递它得到的位置

getCurrentPosition方法将执行以下操作:

function getCurrentPosition(successCallback) {
    var position = loadFromSomewhereThatMayTakeAWhile();
    successCallback(position);
}
getCurrentPosition可能需要几秒钟甚至几分钟才能获取当前位置。发生这种情况时,您不希望浏览器停止响应。回调允许您在该操作完成时调用另一个方法来处理结果。然后,浏览器可以继续执行其他操作,并且只有在操作完成时才执行回调

该函数使用此回调样式

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

谢谢,澄清了我的问题。