Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как происходит утечка памяти в даном случае? (https://javascript.ru/forum/misc/5985-kak-proiskhodit-utechka-pamyati-v-danom-sluchae.html)

Yazla 05.11.2009 20:43

Как происходит утечка памяти в даном случае?
 
http://webo.in/articles/habrahabr/18...-memory-leaks/ отличная статья по утечкам памяти, но одного примера я немогу понять "Постраничные утечки".
Цытата:
"Базовый шаблон заключается во временном соединении двух только что созданных элементов вместе, что создает область видимости, в которой определен дочерний элемент. Затем, при включении этого двух-элементного дерева в основное, они оба наследуют контекст всего документа, и происходит утечка во временном объекте (чей контекст мы не закрыли)."

Пример из статьи:
function LeakMemory()
	{
	    var hostElement = document.getElementById("hostElement");

	    // Давайте посмотрим, что происходит с памятью в Диспетчере Задач

            for(i = 0; i < 5000; i++)
	    {
		var parentDiv =
		    document.createElement("<div onClick='foo()'>");
		var childDiv =
		    document.createElement("<div onClick='foo()'>");

                // Здесь вызывается утечка на временном объекте
		parentDiv.appendChild(childDiv);
		hostElement.appendChild(parentDiv);
		hostElement.removeChild(parentDiv);
		parentDiv.removeChild(childDiv);
		parentDiv = null;
		childDiv = null;
            }
	    hostElement = null;
	}


Может ктото объяснить пожагово, как происходит это утчека?

Заранее благодарен.

e1f 09.11.2009 11:35

Из-за вот этого:
Цитата:

onClick='foo()'

Yazla 09.11.2009 13:02

Спасибо e1f, это я понял, но я немогу понять каким образом создается эта область видимости о которой сказано здесь:
Цитата:

Базовый шаблон заключается во временном соединении двух только что созданных элементов вместе, что создает область видимости, в которой определен дочерний элемент.


Часовой пояс GMT +3, время: 12:12.