Показать сообщение отдельно
  #7 (permalink)  
Старый 03.08.2018, 19:07
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

kvizor34,

На самом деле алерт выполняется позже, но он блокирует js. Как следствие, приостанавливается весь event loop, а значит, не происходит перерисовка (она делается не сразу, а отдельным таском в событийном цикле). А так, в DOM-дереве элемент "p" уже есть.

http://jsfiddle.net/alexandroppolus/o34p6gub/ - запусти эту ссылку с открытой консолью. По крайней мере на макбуке в консоли пишется число элементов "p", до закрытия алерта.

Сообщение от Dilettante_Pro Посмотреть сообщение
<body>

</body>
<script>
var elem = document.createElement('p');
elem.textContent = 'textContent';
document.body.appendChild(elem);

setTimeout(function() {
   alert('1');
},100);
</script>
вот здесь алерт вызывается в отдельном таске, уже после перерисовки, и элемент виден.
А если в этом коде заменить "setTimeout" на "Promise.resolve().then", то элемент опять потеряется, потому что алерт будет вызван хоть и асинхронно, но наиболее приоритетно (в микротаске), т.е. опять же перед отрисовкой.

Последний раз редактировалось Alexandroppolus, 03.08.2018 в 19:13.
Ответить с цитированием