Учебник по JS

ГЛАВНАЯ JS Введение JS Куда Вывод JS Заявления JS JS-синтаксис JS-комментарии JS-переменные JS Пусть Константа JS JS-операторы JS-арифметика Назначение JS JS-типы данных JS-функции JS-объекты JS-события JS-строки Строковые методы JS Поиск строки JS Шаблоны строк JS JS-номера Методы номеров JS JS-массивы Методы массива JS Сортировка массива JS Итерация массива JS Константа массива JS JS-даты Форматы даты JS Методы получения даты JS Методы установки даты JS JS-математика JS Случайный JS Булевы значения Сравнение JS JS-условия JS-переключатель JS цикл для Цикл JS для входа Цикл JS для Цикл JS во время Перерыв JS JS-итерации JS-наборы JS-карты JS Typeof Преобразование типов JS JS побитовый JS регулярное выражение JS-ошибки Область JS JS-подъем Строгий режим JS JS это ключевое слово Функция стрелки JS JS-классы JS JSON JS-отладка Руководство по стилю JS Лучшие практики JS JS-ошибки JS-производительность Зарезервированные слова JS

JS-версии

JS-версии JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE/пограничный История JS

JS-объекты

Определения объектов Свойства объекта Методы объекта Отображение объекта Средства доступа к объектам Конструкторы объектов Прототипы объектов Итерации объектов Наборы объектов Карты объектов Ссылка на объект

JS-функции

Определения функций Параметры функции Вызов функции Вызов функции Функция Применить Закрытие функций

JS-классы

Введение в класс Наследование классов Статический класс

JS асинхронный

Обратные вызовы JS JS асинхронный JS-обещания JS асинхронный/ожидание

JS HTML DOM

Дом Введение DOM-методы Документ DOM DOM-элементы DOM HTML DOM-формы ДОМ CSS DOM-анимации События ДОМ Слушатель событий DOM DOM-навигация DOM-узлы Коллекции DOM Списки узлов DOM

Спецификация браузера JS

JS-окно JS-экран Местоположение JS История JS JS-навигатор Всплывающее оповещение JS JS Тайминг JS-куки

JS-веб-API

Введение в веб-API API веб-форм API истории веб-поиска API веб-хранилища API веб-работника API веб-выборки API веб-геолокации

JS АЯКС

Введение в АЯКС AJAX XMLHttp АЯКС-запрос AJAX-ответ XML-файл AJAX АЯКС PHP АЯКС АСП База данных AJAX AJAX-приложения Примеры AJAX

JS JSON

Введение в JSON Синтаксис JSON JSON против XML Типы данных JSON Анализ JSON Строковая JSON JSON-объекты JSON-массивы JSON-сервер JSON PHP JSON HTML JSON JSONP

JS против JQuery

Селекторы jQuery JQuery HTML jQuery CSS JQuery DOM

JS-графика

JS-графика JS Холст JS сюжет JS Chart.js JS Google Диаграмма JS D3.js

JS-примеры

JS-примеры JS HTML DOM JS HTML-ввод HTML-объекты JS HTML-события JS JS-браузер JS-редактор JS-упражнения JS-викторина JS-сертификат

JS-ссылки

Объекты JavaScript HTML DOM-объекты


Обратные вызовы JavaScript

"Я перезвоню позже!"

Обратный вызов — это функция, которая передается в качестве аргумента другой функции.

Этот метод позволяет функции вызывать другую функцию

Функция обратного вызова может выполняться после завершения другой функции.

Последовательность функций

Функции JavaScript выполняются в той последовательности, в которой они вызываются. Не в той последовательности, в которой они определены.

В этом примере будет показано «До свидания»:

Пример

function myFirst() {
  myDisplayer("Hello");
}

function mySecond() {
  myDisplayer("Goodbye");
}

myFirst();
mySecond();

В этом примере в конечном итоге будет отображаться «Hello»:

Пример

function myFirst() {
  myDisplayer("Hello");
}

function mySecond() {
  myDisplayer("Goodbye");
}

mySecond();
myFirst();


Контроль последовательности

Иногда вы хотели бы иметь лучший контроль над тем, когда выполнять функцию.

Предположим, вы хотите выполнить расчет, а затем отобразить результат.

Вы можете вызвать функцию калькулятора ( myCalculator), сохранить результат, а затем вызвать другую функцию ( myDisplayer) для отображения результата:

Пример

function myDisplayer(some) {
  document.getElementById("demo").innerHTML = some;
}

function myCalculator(num1, num2) {
  let sum = num1 + num2;
  return sum;
}

let result = myCalculator(5, 5);
myDisplayer(result);

Или вы можете вызвать функцию калькулятора ( myCalculator), и пусть функция калькулятора вызовет функцию отображения ( myDisplayer):

Пример

function myDisplayer(some) {
  document.getElementById("demo").innerHTML = some;
}

function myCalculator(num1, num2) {
  let sum = num1 + num2;
  myDisplayer(sum);
}

myCalculator(5, 5);

Проблема с первым примером выше заключается в том, что вам нужно вызвать две функции для отображения результата.

Проблема со вторым примером заключается в том, что вы не можете запретить функции калькулятора отображать результат.

Теперь пришло время ввести обратный вызов.


Обратные вызовы JavaScript

Обратный вызов — это функция, которая передается в качестве аргумента другой функции.

Используя обратный вызов, вы можете вызвать функцию калькулятора ( myCalculator) с обратным вызовом и позволить функции калькулятора выполнить обратный вызов после завершения вычисления:

Пример

function myDisplayer(some) {
  document.getElementById("demo").innerHTML = some;
}

function myCalculator(num1, num2, myCallback) {
  let sum = num1 + num2;
  myCallback(sum);
}

myCalculator(5, 5, myDisplayer);

В приведенном выше примере myDisplayerэто имя функции.

Он передается в myCalculator()качестве аргумента.

Когда вы передаете функцию в качестве аргумента, помните, что нельзя использовать круглые скобки.

Справа: мой калькулятор (5, 5, мой дисплей);

Неправильный:мой калькулятор (5, 5, мой дисплей ());


Когда использовать обратный вызов?

Приведенные выше примеры не очень интересны.

Они упрощены, чтобы научить вас синтаксису обратного вызова.

Где обратные вызовы действительно хороши, так это в асинхронных функциях, где одна функция должна ждать другую функцию (например, ожидание загрузки файла).

Асинхронные функции рассматриваются в следующей главе.