РЕДАКТИРОВАТЬ : Это всего лишь простой пример, демонстрирующий беспокойство, которое я испытываю с гораздо более крупной программой.Я бы не использовал этот фактический код ни для чего:)
Если бы я запустил это -
<!DOCTYPE html>
<html>
<head>
<script>
function update(amount, win, data)
{
win.innerText = 'Count is ' + amount;
setTimeout(function() { update(amount + 1, win, {data: 'something'})}, 1000);
}
window.onload = function() {
var win = document.getElementById('item');
update(0, win, 0);
}
</script>
</head>
<body>
<div id="item"></div>
</body>
</html>
Вызов setTimeout предположительно создает замыкание, которое захватывает содержимое параметров в "функция обновления (сумма, выигрыш, данные).Таким образом, эти переменные сохраняются в памяти до тех пор, пока не будет вызван тайм-аут и не вернутся, чтобы они были доступны внутри вызова этой функции ...
Но эта функция создает закрытие new для следующей итерациитаймаута ... Что будет запечатлено во втором закрытии?Это просто новые копии этих переменных или те, которые составляли часть вызова функции, будут перехвачены снова в новом замыкании?
По сути это будет в конечном итогенехватка памяти из-за того, что данные в каждом закрытии становятся все больше и больше, или это безопасно и разумно?