Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Поведение DOM объекта (https://javascript.ru/forum/events/49434-povedenie-dom-obekta.html)

igory 13.08.2014 11:07

Поведение DOM объекта
 
Привет.

Подскажите, пожалуйста, почему так происходит:

var block = document.getElementById('block');

var  block_list = block.children;

console.log(block_list); // объект, содержащий узлы 

block.innerHTML = '';

console.log(block_list); //  объект, не содержащий узлы


Для меня это выглядит следующим образом:

var Obj = {one: 123, two:{a:1, b:2}};

var xxx = Obj.two.b;

Obj.two = null;

console.log(xxx); //выведет  2, хотя по логике верхнего примера должеy был вывести null

Octane 13.08.2014 11:15

Потому-что инстансы NodeList или HTMLCollection - это динамически изменяемые объкты, это что-то типа современного слабосвязанного WeakMap, вроде бы и ссылка на объект в нем есть, но сборщик мусора не считает её и удаляет объект.

Более того, удаление узлов с помощью innerHTML может привести к разным результатам в браузерах, наиболее агрессивно из памяти узлы вычищал IE.

ixth 13.08.2014 11:20

Потому что NodeList — "живая" коллекция, каждое обращение к нем — неявный вызов getChildNodes. Вот тут вроде это описано: http://learn.javascript.ru/searching...-getelementsby


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