|
1 / 1 / 0
Регистрация: 31.03.2014
Сообщений: 78
|
|
Почему callback-функции называются функциями ОБРАТНОГО вызова05.10.2015, 04:29. Показов 4322. Ответов 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 способа задания функции обратного вызова
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|