Это своего рода вопрос о головном мозге, поскольку код работает отлично, как есть, он просто немного раздражает мое эстетическое чувство. Я обращаюсь к Stack Overflow, потому что мой собственный мозг терпит неудачу прямо сейчас.Функции обратного вызова Javascript и рекурсия
Вот фрагмент кода, который просматривает адрес с помощью API JS Google Maps и помещает маркер на карту. Однако иногда исходный поиск не работает, поэтому я хочу повторить процесс с другим адресом.
geocoder.getLatLng(item.mapstring, function(point) {
if (!point) {
geocoder.getLatLng(item.backup_mapstring, function(point) {
if (!point) return;
map.setCenter(point, 13);
map.setZoom(7);
map.addOverlay(new GMarker(point));
})
return;
}
map.setCenter(point, 13);
map.setZoom(7);
map.addOverlay(new GMarker(point));
})
(Второй параметр getLatLng
является функцией обратного вызова.)
Конечно, вы можете увидеть, что три линии, которые отцентровать и приблизить карту и добавить маркер дублируются, один раз в основной функции обратного вызова и один раз в «обратном обратном вызове» (ха-ха). Можете ли вы найти способ выразить все это без какой-либо избыточности? Вы зарабатываете бонусные баллы и мою лесть, если ваше решение работает для произвольного количества строк резервной карты.
Вам не нужно буквальное имя, вы можете использовать то, что я использовал в своем решении - arguments.callee относится к функции. – 2008-11-09 06:43:54