Это функция, которую вы часто увидите в 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
})
Спасибо, уточняет мою проблему. – Katgus