|
1 / 1 / 0
Регистрация: 31.03.2014
Сообщений: 78
|
|
Почему callback-функции называются функциями ОБРАТНОГО вызова05.10.2015, 04:29. Показов 4392. Ответов 3
Метки нет (Все метки)
Доброго времени.
Нуждаюсь в объяснении. Очередной вопрос в стиле «Что такое callback-функции и зачем они нужны». Я уже перечитал (некоторую по несколько раз) много информации, но так и не понял что это и зачем его есть ... В частности перелопатил 1.5 страницы результатов Google и поиск на CyberForum ... Вопрос: Что значит «обратного вызова»: обратного; в смысле вызываются ещё раз или в смысле вызываются в обратную сторону?
0
|
|
| 05.10.2015, 04:29 | |
|
Ответы с готовыми решениями:
3
Асинхронное программирование: почему в AsyncCallback не указать метод обратного вызова Реализация функции обратного вызова |
| 05.10.2015, 08:16 | |||||||||||||||||||||||||||||
|
callback -- это точно такая же функция, как и остальные. И правила на нее действуют те же самые, при вызове. Они не вызываются "еще раз", хотя, как и любые другие функции, могут, но это не есть ее признак. Первое, что придет в голову, это будет что-то вроде
А вы хотите чтоб кроме часиков у вас еще работали всплывающие подсказки, показывались формочки при нажатии на кнопке, чтоб гугль эдсенс работал, да и вообще чтоб страница не зависла наглухо, потому что на самом деле подобный код заблокирует весь поток браузера для этой страницы. Так вот, что делать? Если подумать, то вам всего лишь раз в секунду нужно исполнить кусок кода
Делается это с помощью специальных функций setTimeout и setInterval. А работают они очень просто -- они регистрируют событие таймера, и позволяют программисту определить, что произойдет при наступлении этого события. То есть вы говорите, мол каждую секунду, сделайте то, что я щас напишу. Но как это написать? Как задать какой-то блок кода, чтоб его можно было выполнить? Помните, какой структурной единицей являются блоки кода? Правильно, подпрограммами. А в js-е подпрограммы называются функциями. Мы просто указываем функцию как один из аргументов setTimeout, или в данном случае, setInterval, и она будет исполняться при наступлении события от таймера, когда пройдет указанное вами время.
Не по теме: Обычно, когда функция присваевается переменной, а не создается конструкция вида function func_name() {} область ее видимости становится более очевидной, хотя на самом деле, насколько мне известно, они совпадают, но тут я уже не уверен События бывают не только от таймера. У каждого DOM-элемента на странице (за редким исключением) есть события onclick, onmousemove, onresize итд, у текстовых полей можно делать произвольный код при нажатии любой клавиши (вернее, почти любой), и чуть и не полностью переопределять стандартное поведение, "навязываемое" браузером, или дополнить его в том или ином виде. И все ваши переопределения сработают только тогда, когда произойдет заданное вами событие, и не ранее того. И неважно, что у вас будет в коде, скажем, миллион строчек -- всегда исполняться будет только то, что должно, а не все подряд. Такой подход, что код исполняется не постоянно, а по мере наступления событий -- это один из способов т.н. асинхронного подхода к программрованию Не по теме: еще есть, как минимум, промисы с фьючерсами, которые кстати, добавили в стандарт ES6. А также сопрограммы, которые тоже отчасти были добавлены, или добавляются, в виде генераторов, в ECMAScript (он же JavaScript в данном контексте) Так вот. Эти самые функции, которые вызываются извне, платформой (в данном случае, браузером) при наступлении некоторого события, и есть коллбек-функции. Однако, иногда они вызываются и из пользовательского кода, когда это удобно. А называются они так, ну как мне кажется, потому что происходит вызов кода, который физически расположен в том же месте (даже на одной строчке), где вы устанавливаете обработчик. Хотя на самом деле, код, который вызовет вашу функцию, находится где-то совершенно в другом месте, вплоть до самого браузернго движка. И это своего рода передает управление как-бы "обратно", в ваш код. Не знаю, понятна ли ассоциация, если не очень, то рекомендую в любом случае начать с изучения функций высшего порядка, с функциональных языков -- там это применяется чаще, а потому объяснено подробнее. js конечно тоже отчасти функционален, но императивные штуки, при обучении таким вещам, могут просто отвлекать, на самом деле. Не по теме: про хаскель шутка, есть и более простые языки, например, erlang, или lisp, который приведен в качестве примера в замечательной книжке о программировании в целом, SICP
4
|
|||||||||||||||||||||||||||||
|
1 / 1 / 0
Регистрация: 31.03.2014
Сообщений: 78
|
||||
| 19.03.2016, 23:30 [ТС] | ||||
|
NEbO, что-то я вам тогда (когда вы мне ответили) и спасибо не сказал?... Вроде бы (так как вы много написали, а мозги у меня кипели) я просто вскользь пробежался по тексту и всё: оставил на потом (точно помню, что читал; но, по-моему, не до конца)
.Ну так вот. Вы очень доступно описали принцип работы callback-функций — спасибо. Но меня всегда (ну, с тех пор как я начал изучать программирование) интересовал вопрос: «Почему, блин, "callback"?». Вообще я в себе выработал следующую привычку (думаю, это что ни есть правильный подход): перед тем как вникать как что-то работает, следует разобраться что это значит; потом можно даже не смотреть как это работает, потому как и так всё станет понятно .Общий пример: если мы разбираемся в том, что значит какое-нибудь заимствованное словечко, то нужно узнать его этимологию; всё: определение можно даже не смотреть .Частный пример: «Что, блин, такое проприетарный?». Это слово может наводить кучу недопониманий; однако всё просто: переведём на русский слово proprietary — частный; всё стало понятно, неправда ли? Даже не нужно лезть в Wikipedia и искать определение, потому как оно уже не нужно: проприетарный — частный (находящийся в частной собственности) ... Я до сих пор не могу понять зачем это делать: брать английские слова и заимствовать по их прямому звучанию в русский (скоро все на английской трасянке будет разговаривать; аля «Го ту магазин», «Сколько тайм», «Дай пен» и так далее) ... А недавно по зомбиящику слышал (в новостях или «ЧП», не помню точно) накануне 8 Марта:
...Почему, почему блин не сказать по-русски: «по половому признаку»; и все бы поняли, а не строили догадки?.. Я просто у Матери спросил сразу: «Ты поняла, что такое "по гендерному признаку"?». Она ответила: «Наверное, "по половому признаку"?». То есть, наверное! А вот если бы по зомбику сказали по-русски, то и вопроса моего не возникло. Gender — (с англ.) пол (мужской/женский, а не деревянный ) ...К чему это я?.. А к тому, что тоже самое и в программировании: позаимствуют кучу слов и потом сиди-разбирайся что-к-чему-да-как .Вау! Нифигассе я написал уже ... К делу. В общем не знаю точно это или нет, но callback'ами, по-моему, их назвали потому, так как они работают как спусковые рычаги/крючки (triggers, на трасянке — тригеры): базовая функция сработала и нажала спусковой рычаг — произошёл запуск callback-функции; а именно само слово взято из аналогии «перезвони» — по-простому «сопля», «глухарь», «бомжик»; то есть когда у первого абонента нет денег, но ему нужно поговорить со вторым абонентом, поэтому он совершает ему неполноценный звонок: «соплю» — второй абонент, увидев пропущенный вызов, перезванивает первому и все довольны .Добавлено через 22 часа 7 минут Одна трасянка вокруг :
https://learn.javascript.ru/fu... 2578722399 Осталось совсем чуть-чуть :
0
|
||||
|
1 / 1 / 0
Регистрация: 31.03.2014
Сообщений: 78
|
|
| 28.03.2016, 11:31 [ТС] | |
|
Да, всё-таки я примерно угадал ...
Можно прочесть (англ.) здесь: http://stackoverflow.com/a/14220323/4223982; под заголовком «Asynchronous». P. S. Всё вертится вокруг асинхронной работы функций.
0
|
|
| 28.03.2016, 11:31 | |
|
Помогаю со студенческими работами здесь
4
3 способа задания функции обратного вызова
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита табличной части. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
|
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|