<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://support.qbpro.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%92%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B5_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8</id>
	<title>Возвратные функции - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://support.qbpro.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%92%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B5_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8"/>
	<link rel="alternate" type="text/html" href="https://support.qbpro.ru/index.php?title=%D0%92%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B5_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;action=history"/>
	<updated>2026-04-03T22:10:21Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.38.1</generator>
	<entry>
		<id>https://support.qbpro.ru/index.php?title=%D0%92%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B5_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=226&amp;oldid=prev</id>
		<title>imported&gt;Supportadmin: Новая страница: «оригинал:http://ruseller.com/lessons.php?rub=28&amp;id=1371 ----- Если у вас есть хотя бы небольшой опыт работы с JavaSc…»</title>
		<link rel="alternate" type="text/html" href="https://support.qbpro.ru/index.php?title=%D0%92%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%82%D0%BD%D1%8B%D0%B5_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=226&amp;oldid=prev"/>
		<updated>2013-08-04T09:58:08Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «оригинал:http://ruseller.com/lessons.php?rub=28&amp;amp;id=1371 ----- Если у вас есть хотя бы небольшой опыт работы с JavaSc…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;оригинал:http://ruseller.com/lessons.php?rub=28&amp;amp;id=1371&lt;br /&gt;
-----&lt;br /&gt;
Если у вас есть хотя бы небольшой опыт работы с JavaScript, то наверняка вы уже использовали возвратные функции. Но может быть, полного понимания о том, как они работают, нет.&lt;br /&gt;
&lt;br /&gt;
== Что такое возвратная функция? ==&lt;br /&gt;
&lt;br /&gt;
Статья из Википедии, на которую мы ссылаемся выше, хорошо описывает возвратную функцию как &amp;quot; передача исполняемого кода в качестве одного из параметров другого кода&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Вот простой и распространенный пример, взятый из jQuery:&lt;br /&gt;
&lt;br /&gt;
 $('#element').fadeIn('slow', function() { &lt;br /&gt;
    // код возвратной функции &lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
Здесь осуществляется вызов метода jQuery fadeIn(). Данный метод принимает два аргумента: скорость проявления и возвратную функцию (опционально). В коде функции можно выполнять все, что угодно.&lt;br /&gt;
&lt;br /&gt;
Когда метод fadeIn() завершает выполнение, то выполняется возвратная функция(если она присутствует). Поэтому, в зависимости от выбранной скорости, перед запуском кода возвратной функции будет иметься задержка.&lt;br /&gt;
&lt;br /&gt;
== Как написать возвратную функцию ==&lt;br /&gt;
&lt;br /&gt;
Если вы пишете свою собственную функцию или метод, то затем может понадобиться использование возвратной функции. Вот простой пример реализации возвратной функции:&lt;br /&gt;
&lt;br /&gt;
 function mySandwich(param1, param2, callback) { &lt;br /&gt;
    alert('Начинаем есть бутерброд.\n\nПараметры: ' + param1 + ', ' + param2); &lt;br /&gt;
    callback(); &lt;br /&gt;
 } &lt;br /&gt;
 mySandwich('ветчина', 'сыр', function() { &lt;br /&gt;
    alert('Заканчиваем есть бутерброд.'); &lt;br /&gt;
 }); &lt;br /&gt;
&lt;br /&gt;
Здесь у нас есть функция mySandwich, которая принимает три параметра. Третий параметр - возвратная функция. Когда основная функция выполняется, она генерирует сообщение с выводом переданных параметров. А затем выполняется возвратная функция.&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на параметр “callback” (без скобок). Когда выполняется возвратная функция, нужно использовать скобки. Вы можете называть данный параметр так, как нужно.&lt;br /&gt;
&lt;br /&gt;
Сам код возвратной функции определяется в третьем аргументе при вызове основной функции. Возвратная функция просто выводит сообщение о том, что она выполнилась. То есть в качестве аргумента функции может выступать функция.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Делаем использование возвратной функции опциональным ==&lt;br /&gt;
&lt;br /&gt;
Возвратные функции в jQuery являются опциональными. То есть, метод принимает возвратные функции, но если она не будет использована, то все будет работать без нее. В нашем простом примере страница вернет ошибку, если функция будет вызвана без обратной функции, например, так:&lt;br /&gt;
&lt;br /&gt;
 function mySandwich(param1, param2, callback) { &lt;br /&gt;
    alert('Начинаем есть бутерброд.\n\nПараметры: ' + param1 + ', ' + param2); &lt;br /&gt;
    callback(); &lt;br /&gt;
 } &lt;br /&gt;
 mySandwich('ветчина', 'сыр'); &lt;br /&gt;
&lt;br /&gt;
Действие кода можно посмотреть здесь. если открыть консоль разработчика, то вы увидите сообщение об ошибке “callback is not a function” (парметр callback не является функцией), которое будет появляться после первоначального вызова функции alert.&lt;br /&gt;
&lt;br /&gt;
Чтобы сделать возвратную функцию опциональной, нужно изменить код:&lt;br /&gt;
&lt;br /&gt;
 function mySandwich(param1, param2, callback) { &lt;br /&gt;
    alert('Начинаем есть бутерброд.\n\nПараметры: ' + param1 + ', ' + param2); &lt;br /&gt;
    if (callback) { &lt;br /&gt;
        callback(); &lt;br /&gt;
    } &lt;br /&gt;
 mySandwich('ветчина', 'сыр'); &lt;br /&gt;
&lt;br /&gt;
Теперь осуществляется проверка наличия функции callback, и код выполняется без ошибок.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Проверяем правильность возвратной функции ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для создания завершенного кода нужно проверить переданной значение третьего аргумента на соответствие типа:&lt;br /&gt;
&lt;br /&gt;
 function mySandwich(param1, param2, callback) { &lt;br /&gt;
    alert('Начинаем есть бутерброт.\n\nПараметры: ' + param1 + ', ' + param2); &lt;br /&gt;
    if (callback &amp;amp;&amp;amp; typeof(callback) === &amp;quot;function&amp;quot;) { &lt;br /&gt;
        callback(); &lt;br /&gt;
    } &lt;br /&gt;
 } &lt;br /&gt;
 mySandwich('ветчина', 'сыр', 'овощи'); &lt;br /&gt;
&lt;br /&gt;
Теперь функция выполняет проверку с помощью оператора typeof, чтобы убедиться, что третий параметр действительно является функцией. В примере третий аргумент является строкой. Но проверка с использованием typeof помогает избежать ошибки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Замечания о времени выполнения ==&lt;br /&gt;
&lt;br /&gt;
Хотя утверждение о том, что возвратная функция выполняется последней, если она размещается в конце основной функции, верно, такой порядок иногда нарушается. Например, если функция включает какой-нибудь тип асинхронных действий (например, вызов AJAX или анимацию), то возвратная функция будет выполняться после начала асинхронной части, но может завершиться раньше нее.&lt;br /&gt;
&lt;br /&gt;
Вот пример с использованием метода jQuery animate:&lt;br /&gt;
&lt;br /&gt;
 function mySandwich(param1, param2, callback) {&lt;br /&gt;
    alert('Начинаем есть бутерброд.\n\nПараметры: ' + param1 + ', ' + param2);&lt;br /&gt;
    $('#sandwich').animate({&lt;br /&gt;
        opacity: 0&lt;br /&gt;
    }, 5000, function() {&lt;br /&gt;
        // Анимация завершена.&lt;br /&gt;
    });&lt;br /&gt;
    if (callback &amp;amp;&amp;amp; typeof(callback) === &amp;quot;function&amp;quot;) {&lt;br /&gt;
        callback();&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 mySandwich('ветчина', 'сыр', function() {&lt;br /&gt;
    alert('Заканчиваем есть бутерброд.');&lt;br /&gt;
 });&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что хотя возвратная функция расположена в коде позже анимации, она выполняется задолго до того, как завершится анимация. В данном случае решение задачи достаточно простое: нужно поместить вызов возвратной функции в метод animate (то есть, где располагается комментарий “Анимация завершена”).&lt;br /&gt;
&lt;br /&gt;
'''''Данный пункт не закрывает все вопросы, которые появляются при использовании асинхронных функций, а служит только предупреждением для активации повышенного внимания в таких случаях.'''''&lt;/div&gt;</summary>
		<author><name>imported&gt;Supportadmin</name></author>
	</entry>
</feed>