Утечка памяти с использованием тайм-аута 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);

это все равно приведет к утечке памяти.

Что я здесь не так делаю?

0 ответов

Другие вопросы по тегам