Рассмотрим следующий код:Почему javascript setTimeout() не работает в цикле?
<!DOCTYPE html>
<html>
<head>
<script>
function timedText()
{
var x=document.getElementById('txt');
var t = new Array();
t[1] = setTimeout(function(){x.value="2 seconds"}, 2000);
t[2] = setTimeout(function(){x.value="4 seconds"}, 4000);
t[3] = setTimeout(function(){x.value="6 seconds"}, 6000);
}
function timedTextArr()
{
var x=document.getElementById('txt');
var t = new Array();
for(var i = 0 ; i < 3 ; i++) {
t[i] = setTimeout(function(){x.value=i*2+" seconds"}, i*2000);
}
}
</script>
</head>
<body>
<form>
<input type="text" id="txt" />
<input type="button" value="Display timed text!" onclick="timedText()" />
<input type="button" value="Display timed text Arr!" onclick="timedTextArr()" />
</form>
<p>Click on the button above. The input field will tell you when two, four, and six seconds have passed.</p>
</body>
</html>
Функция timedText()
работает, но timedTextArr()
не делает. Обе функции присваивают значениям от setTimeout()
элементам массива. Но в цикле for()
работает только последний таймер ... и он работает три раза.
Это ошибка?
Интересно. Я буду исследовать «закрытие javascript». Спасибо. – user2624632