Поведение 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
|
Потому-что инстансы NodeList или HTMLCollection - это динамически изменяемые объкты, это что-то типа современного слабосвязанного WeakMap, вроде бы и ссылка на объект в нем есть, но сборщик мусора не считает её и удаляет объект.
Более того, удаление узлов с помощью innerHTML может привести к разным результатам в браузерах, наиболее агрессивно из памяти узлы вычищал IE. |
Потому что NodeList — "живая" коллекция, каждое обращение к нем — неявный вызов getChildNodes. Вот тут вроде это описано: http://learn.javascript.ru/searching...-getelementsby
|
| Часовой пояс GMT +3, время: 22:02. |