Ответ 1
# These are equivalent
_.defer(fn);
setTimeout(fn, 1);
Итак, defer
- это просто миллисекунда setTimeout
. (Он получил еще несколько удобных функций, но они здесь не важны.)
JavaScript работает с циклами. Он однопоточный, но его запуск начинается и останавливается на основе событий или таймеров. Каждый раз, когда ваш JS-движок запускает какой-то код, он запускает одну итерацию цикла выполнения.
Итак, что означает defer
, говорит: "Запустите этот код в следующем цикле цикла".
_.defer(function() { alert('after'); });
alert('before');
Это предупреждение "before", а затем "after". Это связано с тем, что текущий цикл цикла завершает, какие предупреждения "до", а затем сразу начинается новый цикл запуска и запускает код "после".
Поэтому в любое время, когда у вас есть код прямо здесь, но вы хотите, чтобы он запускал код, который возникает после этого кода, тогда вы бы использовали defer
.
_.defer(functionToRunLast);
functionToRunFirst();
Это может быть удобно с DOM. Иногда вы меняете его, но изменения не анализируются и не отображаются немедленно. В конце цикла запуска браузер догоняет и анализирует и отображает DOM, затем запускается следующий цикл запуска и может взаимодействовать с вновь созданным DOM.
(Точно, какие сценарии вызывают задержку DOM, я не уверен, но в прошлом я это заметил в своих собственных проектах.)
Это НЕ замена для DOM. Следующий цикл выполнения может произойти до того, как DOM готов к работе, не путайте эти понятия.