Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
 Аватар для Freeze_Breeze
278 / 272 / 106
Регистрация: 12.01.2016
Сообщений: 1,666

Функция callback. Объясните пожалуйста на пальцах!

14.05.2018, 23:06. Показов 2798. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот как я понимаю обычную функицю (инструкцию определения функции "Function Declaration", смотреть рис.):
1) Интерпретатор Java Script считывает функцию и сохраняет ее в памяти. Этот шаг просто подготавливает браузер к выполнению функции, которое произойдет позднее.
2) Функция вызывается, ей передается аргумент(информация) 'Hello'.
3) Аргумент(информация) переданная функции сохраняется в новой переменной под именем 'message'. Этот шаг эквивалентен коду var message = 'Hello';
4) Наконец функция выполняется, выводя на веб страницу значение сохраненное в переменной message
Все, наша функция отработала, все красиво, все работает.
JavaScript
1
2
3
4
function print(message) {
    console.log(message);
}
print('Hello');
Но что простите происходит вот здесь (рис. 2)?
JavaScript
1
2
3
4
5
6
7
var func = function(callback) {
    var name = 'Breeze';
    callback(name);
};
func(function(n) {
    console.log('Freeze ' + n);
});
Про callback знаю только то, что мы передаем функцию в качестве аргумента, то есть для передачи функции которая будет выполнена после выполнения функции в которую она передается.
Что могу добавить от себя по рис. 2
1) Мы пишем выражение определение функции (Function Expression), анонимная функция
6) Передаем в нашу функцию аргумент 'callback'
2) В нашей функции мы инициализируем переменную name и присваиваем ей строковое значение 'Breeze';
3) В нашу переменную 'callback' мы передаем параметр нашей переменной name,
то есть name = 'Breeze';
4) Ну а дальше у меня начали плавится мозги из за непонятия происходящего в коде под пунктами 4 и 5.
4) Мы вроде бы, как бы определяем анонимную функцию, которая является параметром нашей первой функции var func = function(callback){}
7) Это наш параметр, который мы будем использовать в нашей функции не понятно как и каким он боком здесь вообще оказался и какое у него значение или строковый литерал в него передаем не понятно.
5) Выводим в консоль строку 'Freeze' + n, от куда 'n' и как оно принимает какое нибудь значение или что эта буква здесь вообще забыла я не понимаю.
Если кто то сможет объяснить на пальцах, по цифрах, буду очень признателен.
Миниатюры
Функция callback. Объясните пожалуйста на пальцах!   Функция callback. Объясните пожалуйста на пальцах!  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.05.2018, 23:06
Ответы с готовыми решениями:

UncaughtExceptionHandler, объясните все на пальцах пожалуйста
есть программа которая работает не корректно, но для начала хотелось бы не разобрать ошибки, а что происходит в ней на самом деле в данный...

Объясните на пальцах алгоритм работы, пожалуйста)
Отдельные фрагменты кода приветствуются)))

Классы в С++. Разделение программы на файлы. Объясните пожалуйста на пальцах
Доброго всем времени суток. Столкнулся с проблемой не переваривания интернет информации относительно классов, методов и полей. Запихивание...

7
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
14.05.2018, 23:38
Цитата Сообщение от Freeze_Breeze Посмотреть сообщение
Ну а дальше у меня начали плавится мозги
Да, JS такой ))
Вы правильно начали проходить сценарий по шагам, но тут еще нужно подключать немного воображения. Если записать так, то более понятно будет или всё равно нужно разъяснить?
JavaScript
1
2
3
4
5
6
7
8
9
10
var func = function(callback) {
  var name = 'Breeze';
  callback(name);
};
 
 
var otherFunc = function(n) {
  console.log('Freeze ' + n);
};
func(otherFunc);
Добавлено через 10 минут
Чтобы еще легче было, представляйте вместо имён переменных, значения, которые им присваиваются. То есть, вместо callback подставьте анонимную функцию, которую аргументом передаёте в функцию func.
1
 Аватар для Freeze_Breeze
278 / 272 / 106
Регистрация: 12.01.2016
Сообщений: 1,666
15.05.2018, 00:10  [ТС]
Lazy_Den,
Единственное, что не понятно это в каком месте мы параметру(переменной) 'n' присваиваем значение строки 'Freeze', если в первом примере функции var func = function(callback) мы четко дали понять var name = 'Breeze'; callback(name); То во второй функции ('Freeze ' + n); в этой строке??? Не понятно. И еще в какой последовательности выполняются эти функции? Ну по выводу ответа в консоль первой отрабатывает var otherFunc = function(n), а за ней var func = function(callback) и уже потом только мы получаем ответ func(otherFunc);, правильно? Если правильно то почему так происходит? И где черт возьми мы параметру 'n' присваиваем эти буквы 'Freeze я просто не понимаю этого и дико нервничаю.
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
15.05.2018, 00:23
Цитата Сообщение от Freeze_Breeze Посмотреть сообщение
я просто не понимаю
Еще упрощаем:
JavaScript
1
2
3
4
5
6
7
8
9
var func = function() {
  var name = 'Breeze';
  // Всё, что ниже - по сути то, что было строкой callback(name)
  (function(n) {
    console.log('Freeze ' + n);
  })(name);
};
 
func();
Добавлено через 2 минуты
Вот этот код
(function(n) {
console.log('Freeze ' + n);
})
== callback, ну а (name) так и осталось.
Я ж говорю, представляйте на месте переменной то, что в ней находится
1
 Аватар для Freeze_Breeze
278 / 272 / 106
Регистрация: 12.01.2016
Сообщений: 1,666
15.05.2018, 00:32  [ТС]
Lazy_Den,
Я правильно понимаю
JavaScript
1
2
3
4
5
6
7
8
9
var func = function(name) {
    //тело функции
}
console.log('Breeze'/*<-- Эту строку мы передаем в параметр 'name' функции func*/);
 
(function(n) {
    //тело функции
    console.log('Freeze' + n /*<-- Этой строкой мы присваиваем переменной 'n' значение 'Freeze'*/);
});
Если выражаться языком Java Script, то console.log('Breeze') === console.log('Freeze' + n)
Я правильно понял?
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
15.05.2018, 00:58
Цитата Сообщение от Freeze_Breeze Посмотреть сообщение
Я правильно понял?
Комментарии к коду - близко к правде, только с нервами еще не справились и сам код сумбурный получился.
Давайте для закрепления попробуем еще с другой стороны зайти.
1. Первый шаг - вызов функции func с передачей ей анонимной функции.
2. func принимает анонимную функцию и присваивает её переменной callback. То есть, это мы могли бы записать так:
JavaScript
1
2
3
var callback = function(n) {
  console.log('Freeze ' + n);
};
3. Присваивается значение 'Breeze' переменной name
4. Вызывается наша многострадальная функция, присвоенная переменной callback, с передачей ей в качестве аргумента переменной name
JavaScript
1
callback(name);
5. Теперь уже выполняется та самая анонимная функция. Значение переданной переменной name, присваивается переменной n/ Проставим вручную
JavaScript
1
2
3
function('Breeze') {
  console.log('Freeze ' + 'Breeze');
};
Добавлено через 6 минут
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
var func = function(callback) {
 
  // Эта часть - то, что происходит при приёме агрумента автоматом
  // функция присваивается переменой callback
  // визуализируем для понимания
  callback = function(n) {
    console.log('Freeze ' + n);
  };
 
  // обычный вызов функции
  callback('Breeze');
 
};
1
 Аватар для Freeze_Breeze
278 / 272 / 106
Регистрация: 12.01.2016
Сообщений: 1,666
15.05.2018, 01:06  [ТС]
Lazy_Den, спасибо Вам большое, что все разъяснили, но с этим я пожалуй разберусь уже завтра, так ка голова совсем не варит. Еще раз спасибо.
0
15.05.2018, 01:10

Не по теме:

Цитата Сообщение от Freeze_Breeze Посмотреть сообщение
с этим я пожалуй разберусь уже завтра
Правильно. В нашем деле спешка не нужна :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.05.2018, 01:10
Помогаю со студенческими работами здесь

Объясните пожалуйста "на пальцах" смысл компонента ADOConnection
Пока у меня база на локальном компе, использую ADOQuery или ADOTable, у них есть параметр ConnectionString. Теперь нужно будет БД выложить...

Объясните на Пальцах!
Зачем паралельно катушке реле включают конденсатор или диод или все вместе.

Объясните замыкания в C# на пальцах
Объясните, пожалуйста, как можно проще. Желательно с самыми простыми примерами.

Объясните пожалуйста что делает функция
и если это какая то формула, то можно ссылку на неё int letterFromNumber(int number, int index, int n) { int num = number /...

Как работает LCD объясните на пальцах?
Разобрал вот такой дисплейчик: http://www.youtube.som/watch?v=ynW69PzY ... tood_owner А как его можно использовать? Что нужно в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru