addClass
не является асинхронным, и нет среды, в которой для выполнения его работы потребуется значительное время.Различные операции jQuery, которые являются асинхронными (ajax, эффекты и тому подобное), принимают обратные вызовы как часть своего API.
I думать (не возвращаясь и не возвращаясь-читание API), что если функция API не имеет обратного вызова, вы можете предположить, что операция является синхронной.
Обратное неверно;В jQuery есть несколько функций API (например, each
), которые принимают обратные вызовы, которые не являются асинхронными, просто обратный вызов удобен по другим причинам.
В любом случае, любойасинхронная операция должна быть четко обозначена как таковая в документации.
Обновление : решение обновленного вопроса: правильно, код после addClass
не будет выполняться до тех пор, пока addClass
не будет завершен.Даже если это заняло секунду или две (что, конечно, не так, но давайте представим), addClass
выполнит свою работу и вернется к вашему коду.Последующий код не будет работать до тех пор, пока он не будет запущен, и никакой другой код не может быть запущен, пока это происходит (поскольку JavaScript в веб-браузерах является однопоточным, если вы не используете веб-работников , и даже тогда координация между потоками является явной).
В некоторых операциях браузеру нужно дать время для обработки того, что вы ему сказали.Я пытаюсь придумать конкретный пример, что-то вокруг добавления полей формы в IE.Определенно не простых вещей.В этих редких ситуациях вы можете убедиться, что вы дали браузеру возможность сделать свое дело, явно уступив браузеру с setTimeout
:
doSomethingTheBrowserHasToThinkAbout();
setTimeout(function() {
// Now you know the browser's had time to think about it
doSomethingElse();
}, 0); // <== Won't really be 0, most browsers clamp this to 5-10ms minimum
Но вы нене нужно делать это (и не хочу этого делать) за исключением определенных конкретных операций.Извините, я не сразу вспоминаю пример, но мы говорим о крайних случаях здесь.