Этот эксперимент говорит вам, что в Chrome, JavaScript выполнение и анимация / рисунок gif происходят в отдельных потоках (или, возможно, даже в отдельных процессах). Тот факт, что JavaScript является однопоточным, не означает, что весь остальной браузер также должен работать в том же потоке. Ваш бесконечный l oop по-прежнему будет препятствовать обработке дополнительных событий, потому что управление никогда не вернется к событию l oop - но событие l oop является концепцией JavaScript, и гифкам не нужно заботиться об этом.
Вот обновленный эксперимент, демонстрирующий, что:
<head>
<script>
var stop_requested = false;
function loop() {
while (!stop_requested) {}
}
function stop() {
alert('requesting stop');
stop_requested = true;
}
</script>
</head>
<body>
<button onclick="loop()">interruptible loop</button>
<button onclick="stop()">request stop</button>
</body>
Если вы нажмете первую кнопку, будет запущен бесконечный бесконечный l oop, который заблокирует вторую кнопку. обработчик событий (вы никогда не увидите окно предупреждения).