Я попробовал пример @ bobince с небольшими изменениями:
<html>
<head>
<title>Test</title>
</head>
<body>
<textarea id="log" rows="20" cols="40"></textarea>
<br />
<button id="act">Run</button>
<script type="text/javascript">
let l= document.getElementById('log');
let b = document.getElementById('act');
let s = 0;
b.addEventListener('click', function() {
l.value += 'click begin\n';
s = 10;
let s2 = s;
alert('alert!');
s = s + s2;
l.value += 'click end\n';
l.value += `result = ${s}, should be ${s2 + s2}\n`;
l.value += '----------\n';
});
window.addEventListener('resize', function() {
if (s === 10) {
s = 5;
}
l.value+= 'resize\n';
});
</script>
</body>
</html>
Итак, когда вы нажимаете Run, закрываете всплывающее окно оповещения и делаете «один поток», вы должны увидеть что-то вроде этого:
click begin
click end
result = 20, should be 20
Но если вы попытаетесь запустить это в стабильной версии Opera или Firefox в Windows и свернуть / развернуть окно с всплывающим предупреждением на экране, тогда будет что-то вроде этого:
click begin
resize
click end
result = 15, should be 20
Я не хочу сказать, что это "многопоточность", но какой-то фрагмент кода был выполнен в неподходящее время, и я этого не ожидал, и теперь у меня поврежденное состояние.
И лучше узнать об этом поведении.