Я удивлен, что не могу найти на это четкого ответа. Итак, в jQuery вы можете сделать следующее:
$(someElements).fadeOut(1000);
$(someElements).remove();
Это запустит анимацию fadeOut, но до того, как она завершится в течение 1 секунды, элементы будут удалены из DOM. Но как это возможно? Я продолжаю читать, что JavaScript является однопоточным (см. также: Гарантированно ли однопоточность JavaScript?). Я знаю, что могу сделать либо:
$(someElements).fadeOut(1000).promise().done(function() {
$(someElements).remove();
});
, либо даже лучше:
$(someElements).fadeOut(1000, function() {
$(this).remove();
});
Чего я не понимаю, так это того, как JavaScript работает в «одном потоке», но я могу использовать эти функции jQuery, которые выполняются асинхронно и явно видят DOM меняется в разных местах одновременно. Как это работает? Это не вопрос: «Как мне это исправить».