Утечка памяти с использованием тайм-аута JavaScript
Почему приведенный ниже пример кода приводит к утечке памяти?
<html>
<head>
<script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
</head>
<body>
<div id="id0">String0</div>
<div id="id1">String1</div>
<div id="id2">String2</div>
<div id="id3">String3</div>
<div id="id4">String4</div>
<div id="id5">String5</div>
<div id="id6">String6</div>
<div id="id7">String7</div>
<div id="id8">String8</div>
<div id="id9">String9</div>
<script>
function foo() {
for (var i=0; i<10; i++) {
(function(i){
setTimeout(function(){
var dspl = $("#id"+i).css('display') == 'block' ? 'none' : 'block';
$("#id"+i).css('display', dspl);
}, 50);
})(i);
}
setTimeout(function () {
foo();
}, 100);
}
$(document).ready(function(){
foo();
});
</script>
</body>
Я могу изменить 100 мс на 1000, но результат остается тем же (я поставил 100, чтобы получить результаты быстрее).
Кроме того, если я заменю
...
(function(i){
setTimeout(function(){
var dspl = $("#id"+i).css('display') == 'block' ? 'none' : 'block';
$("#id"+i).css('display', dspl);
}, 50);
})(i);
...
просто
var dspl = $("#id"+i).css('display') == 'block' ? 'none' : 'block';
$("#id"+i).css('display', dspl);
это все равно приведет к утечке памяти.
Что я здесь не так делаю?