Поведение 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, время: 02:39. |