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