Понимание закрытий JavaScript и использования памяти

РЕДАКТИРОВАТЬ : Это всего лишь простой пример, демонстрирующий мою озабоченность по поводу гораздо более крупной программы. Я бы ни для чего не использовал этот реальный код :)

Если я запустил это -

<!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 предположительно создает закрытие, которое фиксирует содержимое параметров функции «обновления» (количество, выигрыш, данные ). Таким образом, эти переменные хранятся в памяти до тех пор, пока не будет вызван тайм-аут, и они не вернутся, чтобы они были доступны внутри этого вызова функции ...

Но эта функция создает новое закрытие для следующей итерации тайм-аута. ... Что будет отражено во втором закрытии? Это просто новые копии этих переменных или те, которые составляли часть вызова функции, будут снова захвачены в новом закрытии?

В принципе, в конечном итоге это закончится. память из-за того, что данные в каждом закрытии становятся все больше и больше, или это безопасно и разумно?

15
задан jcoder 1 June 2011 в 16:26
поделиться