javascript settimeout导致内存泄漏

时间:2016-01-18 11:28:14

标签: javascript memory-leaks settimeout

为什么下面的代码示例会导致内存泄漏?

<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);

它仍然会导致内存泄漏。

我在这里做错了什么?

0 个答案:

没有答案