Ваше определение близко, но недостаточно. Обратный вызов - это функция A, которую вы передаете другой функции B (или объекту B), которую B будет вызывать в соответствующей точке .
Для некоторых функций «соответствующая точка» находится после завершения этой функции, как вы описали.
Многие функции или объекты определяют набор "определенных точек" или событий, когда могут быть вызваны обратные вызовы. Например, если у вас есть элемент управления, который периодически обновляется через AJAX, он может определить событие, которое происходит, когда он собирается обновить, событие, которое происходит после возврата обновления, и событие, которое происходит после отображения результатов. Для любого из этих событий вы можете передать ему свою пользовательскую функцию, которая должна вызываться при возникновении этого события.
Этот определенный набор точек, где может быть вызвана пользовательская функция, - это то, что люди подразумевают под "зацепками". Это места, где вы можете подключить свои функции в готовую библиотеку.
Отредактировано, чтобы добавить:
ОП попросил простой пример хука.
Допустим, я написал функцию, которая берет список имен пользователей и предназначена для просмотра списка, просмотра сведений о каждом человеке и возврата заполненного списка объектов людей.
Может быть, я хочу дать программисту, использующему мою функцию, возможность указать, что должно произойти, если имя пользователя не найдено в моей базе данных. Один программист может захотеть, чтобы функция выдавала ошибку, другой мог бы просто игнорировать отсутствующий пример, другой мог бы захотеть, чтобы она смотрела в другой базе данных, другой мог бы хотеть, чтобы она создала пустой объект person.
Так что моя подпись функции может быть что-то вроде
function getPeople( arrayOfUsernames, missingUsernameCallback )
Внутри функции, когда я прихожу к имени пользователя, которого я не могу найти в моих данных, я просто вызываю
missingUsernameCallback( notFoundUsername );
Теперь программист может вызывать функцию как
getPeople( ["adam","betty","charlie"], function(name){ alert("Missing username " + name)} );
и всякий раз, когда я нажимаю пропущенное имя пользователя, я вызываю переданную мне функцию.
В более сложном случае мне может потребоваться принять объект, содержащий несколько функций обратного вызова, чтобы он мог быть вызван как
getPeople( ["adam","betty","charlie"],
{startOfListCallback: function(){ alert("I'm starting the list")},
missingUsernameCallback: function(){ alert("Missing username"!)},
endOfListCallback: function(){ alert("I'm at the end of the list") });
и т.д.. Список возможных обратных вызовов будет определяться функцией и должен быть в документации API (вместе с параметрами, которые могут быть переданы в обратные вызовы и т. Д.). Этот список обратных вызовов - это хуки.