Уточнение функции обратного вызова

У меня есть такая настройка функции обратного вызова javascript

function myFunction(callback){

    $('meta[name = "viewport"]').prop('content', 'width=1440');
    //other code
    callback()
}

function otherFunction(){
   //some async operation
}

myFunction(otherFunction)

Гарантирует ли этот код, что мой otherFunction не запустится, пока не будет изменено окно просмотра и не будет реализован другой код, указанный выше?

Здесь нет ничего асинхронного, поэтому да, myFunction должен изменить тег meta перед вызовом обратного вызова.

Robin Zigmond 14.09.2018 13:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
1
96
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Если весь код выше вызова callback является синхронным, тогда да, otherFunction будет работать после всего кода выше.

Вот лучший способ разобраться в этом. Здесь я добавил заявление непосредственно перед callBack function. Вы можете увидеть журнал консоли даже после выполнения otherfunction. Так что это полностью зависит от того, используете ли вы код synchronous или asynchronous перед функцией invocation.

function myFunction(callback){

    $('#ipt').val(callback.name);
    //other code
    setTimeout(function(){console.info('hello')},5000)
    callback()
}

function otherFunction(){
   alert( $('#ipt').val());
}

myFunction(otherFunction)
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<input type = "text" id = "ipt" placeholder = "Dummy text"/>

Асинхронные функции обратного вызова всегда будут выполняться после завершения всего синхронного кода. Это потому, что в JS есть нечто, называемое циклом событий, который выглядит следующим образом:

Когда мы выполняем асинхронную операцию, это часто связано с веб-API. Этот веб-API абстрагируется от нас. Нам не нужно знать, как браузер реализует эту функцию (которая, вероятно, написана на C++ как часть браузера). Однако нас интересует ценить операции или возможное возвращаемое значение.

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

Вот почему асинхронные операции всегда будут выполняться последними, потому что цикл событий будет ждать, пока стек не станет пустым, прежде чем помещать в него элемент.

Да, это гарантирует, что myFunction будет работать после всего вышеперечисленного кода, если и только если приведенный выше код callback() также будет синхронным. В примере гарантируется, что callback() будет выполняться только после изменения области просмотра.

Другие вопросы по теме