У меня есть такая настройка функции обратного вызова javascript
function myFunction(callback){
$('meta[name = "viewport"]').prop('content', 'width=1440');
//other code
callback()
}
function otherFunction(){
//some async operation
}
myFunction(otherFunction)
Гарантирует ли этот код, что мой otherFunction не запустится, пока не будет изменено окно просмотра и не будет реализован другой код, указанный выше?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если весь код выше вызова 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() будет выполняться только после изменения области просмотра.
Здесь нет ничего асинхронного, поэтому да,
myFunctionдолжен изменить тегmetaперед вызовом обратного вызова.