为什么下面的代码示例会导致内存泄漏?
<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);
它仍然会导致内存泄漏。
我在这里做错了什么?