44 lines
1.4 KiB
Markdown
44 lines
1.4 KiB
Markdown
# Что выведет после setInterval?
|
||
|
||
[importance 5]
|
||
|
||
В коде ниже запускается `setInterval` каждые 10мс, и через 50мс запланирована его отмена.
|
||
|
||
После этого запущена тяжёлая функция `f`, выполнение которой (мы точно знаем) потребует более 100мс.
|
||
|
||
Сработает ли `setInterval`, как и когда?
|
||
|
||
Варианты:
|
||
<ol>
|
||
<li>Да, несколько раз, *в процессе* выполнения `f`.</li>
|
||
<li>Да, несколько раз, *сразу после* выполнения `f`.</li>
|
||
<li>Да, один раз, *сразу после* выполнения `f`.</li>
|
||
<li>Нет, не сработает.</li>
|
||
<li>Может быть по-разному, как повезёт.</li>
|
||
</ol>
|
||
|
||
Что выведет `alert` в строке `(*)`?
|
||
|
||
```js
|
||
var i;
|
||
var timer = setInterval(function() { // планируем setInterval каждые 10мс
|
||
i++;
|
||
}, 10);
|
||
|
||
setTimeout(function() { // через 50мс - отмена setInterval
|
||
clearInterval(timer);
|
||
*!*
|
||
alert( i ); // (*)
|
||
*/!*
|
||
}, 50);
|
||
|
||
// и запускаем тяжёлую функцию
|
||
function f() {
|
||
// точное время выполнения не играет роли
|
||
// здесь оно заведомо больше 100мс
|
||
for (i = 0; i < 1e8; i++) f[i % 2] = i;
|
||
}
|
||
|
||
f();
|
||
```
|
||
|