diff options
Diffstat (limited to 'files/ru/glossary/callback_function')
-rw-r--r-- | files/ru/glossary/callback_function/index.html | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/files/ru/glossary/callback_function/index.html b/files/ru/glossary/callback_function/index.html new file mode 100644 index 0000000000..1c9118e4b5 --- /dev/null +++ b/files/ru/glossary/callback_function/index.html @@ -0,0 +1,71 @@ +--- +title: Функция обратного вызова +slug: Glossary/Callback_function +tags: + - Callback + - Функция обратного вызова +translation_of: Glossary/Callback_function +original_slug: Словарь/функция_обратного_вызова +--- +<p>Функция обратного вызова - это функция, переданная в другую функцию в качестве аргумента, которая затем вызывается по завершению какого-либо действия.</p> + +<p>Вот краткий пример:</p> + +<pre class="brush: js">function greeting(name) { + alert('Hello ' + name); +} + +function processUserInput(callback) { + var name = prompt('Please enter your name.'); + callback(name); +} + +processUserInput(greeting);</pre> + +<p>Выше приведен пример <a href="/en-US/docs/Glossary/Synchronous">синхронного</a> обратного вызова, поскольку функция <code>processUserInput</code> выполняется синхронно.</p> + +<p>Функции обратного вызова часто используются для продолжения выполнения кода после завершения <a href="/ru/docs/%D0%A1%D0%BB%D0%BE%D0%B2%D0%B0%D1%80%D1%8C/Asynchronous">асинхронной</a> операции - они называются асинхронными обратными вызовами.</p> + +<pre class="brush: js">async function pageLoader(callback) { + const data = await fetch('/ru/docs/Словарь/функция_обратного_вызова') + callback(data) +} + +function onPageLoadingFinished(pageData) { + console.log('Page was sucessfully loaded!') + console.log('Response:') + console.log(pageData) +} + +pageLoader(onPageLoadingFinished) +</pre> + +<p>Вот еще один пример асинхронного обратного вызова: <a href="https://github.com/mdn/learning-area/blob/master/javascript/apis/introduction/maps-example.html">maps-example.html</a> (<a href="http://mdn.github.io/learning-area/javascript/apis/introduction/maps-example.html">живой пример</a>). Он использует Google Maps API и Geolocation API для отображения карты текущего местоположения вашего устройства.</p> + +<pre class="brush: js">// maps-example.html +// Вызов асинхронной функции getCurrentPosition +// с передачей callback функции принимающей координаты +// в качестве параметра +navigator.geolocation.getCurrentPosition(function(position) { + var latlng = new google.maps.LatLng(position.coords.latitude,position.coords.longitude); + var myOptions = { + zoom: 8, + center: latlng, + mapTypeId: google.maps.MapTypeId.TERRAIN, + disableDefaultUI: true + } + var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); +}); +</pre> + +<p>Поскольку получение координат устройства из его GPS является асинхронным (мы точно не знаем, когда данные будут возвращены), метод <code>Geolocation.getCurrentPosition()</code> принимает анонимную функцию обратного вызова в качестве параметра, которая получает найденые данные координат. Эта функция выполняется только по возвращению данных координат.</p> + +<h2 id="Больше_информации"><strong>Больше информации</strong></h2> + +<h3 id="Основное"><strong>Основное</strong></h3> + +<ul> + <li><a href="https://en.wikipedia.org/wiki/Callback_(computer_programming)">Сallback на Wikipedia</a></li> + <li><a href="https://learn.javascript.ru/custom-events">Коллбэки и события на компонентах</a></li> + <li><a href="http://callbackhell.ru/">Ад обратных вызовов</a></li> +</ul> |