РЕДАКТИРОВАТЬ. Это просто простой пример для демонстрации проблем, которые у меня есть с гораздо более крупной программой. Я бы не использовал этот фактический код для чего-либо:)
Если я запустил это -
<!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 предположительно создает закрытие, которое фиксирует содержимое параметров функции "update" (сумма, выигрыш, данные). Таким образом, эти переменные сохраняются в памяти до тех пор, пока не будет вызван тайм-аут и не вернется, чтобы они были доступны внутри этого вызова функции...
Но эта функция создает новое замыкание для следующей итерации таймаута... Что будет зафиксировано в этом втором закрытии? Являются ли это только новые копии этих переменных или будут снова захвачены те, которые были частью вызова функции, в новом закрытии?
В основном это закончится из-за нехватки памяти из-за того, что данные в каждом закрытии становятся все больше и больше, или это безопасно и разумно?