Как jQuery имеет асинхронные функции?

Я удивлен, что не могу найти на это четкого ответа. Итак, в 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 меняется в разных местах одновременно. Как это работает? Это не вопрос: «Как мне это исправить».

13
задан Community 23 May 2017 в 12:09
поделиться