| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > document.createElement() |
| Автор: Иль 15.6.2005, 15:06 | ||
Доброго времени. Не просветите, в каком контексте создается этот div? Где и как висит если в DOM дереве его не видно и продолжает ли он засорять память если я удалю последнюю переменную с ссылкой на него. Что будет если я применю создание без присвоения ссылки переменной? Это будет бесполезный засор памяти? Этот див можно будет достать только через childNodes[i]? |
| Автор: Black 15.6.2005, 17:15 | ||||
Надо, наверное, в документ его добавить, чтобы он в дереве появился.
|
| Автор: Иль 15.6.2005, 19:10 |
| PHP-DIRECTOR, не издевайся наверное, да ... Что до appendChild будет, вот в чем вопрос. |
| Автор: sergejzr 15.6.2005, 21:45 |
| до appendChild ничего не будет. Он в памяти лежит и его innerHTML имеет строку "<div></div>" Больше в принципе и нету ничего, всё остальное null. И если ты удалишь переменную на него или не присвоишь никакой переменной, то после этого его уже никак и ничем не достанешь и сборщик мусора по идее его прибьёт, если он ему попадётся |
| Автор: Sardar 17.6.2005, 02:35 | ||
Нет, это лежит в outerHTML, который есть фича ИЕ. Иль, ты созда обьект, он схавал немного памяти, затем delete который в том синтаксисе что у тебя не должен ничего делать. Оператор delete удаляет свойства обьектов/массивов и (если не ошибаюсь) локальные переменные. Глобальные переменные им убить нельзя. В эффективном смысле delete что_то идеентично что_то = undefined. Сборщик мусора убьёт обéкты на которые нет более ссылок. |
| Автор: Иль 17.6.2005, 10:39 | ||||||
Верно, не обращал на синтаксис внимания, а как позавчера логика полетела (хорошо дебаггер, а так бы труба!) - сразу мануалы читать юзаю:
теперь уяснил. А вообще понял, что просто домовский метод .createElement создает в JS DOM`овский объект, и только такой объект мы можем вставить в дом-дерево. |
| Автор: Иль 17.6.2005, 12:50 | ||
Заинтересовался. Закралось сомнение. Проверил, можно, но не всегда Яж почему глюк словил - до этого удалял глобальные переменные, а тут "догодался" удалить объект и получил false Вот что выдают результаты тестинга: Удалить глобальную/локальную переменную в которой лежит примитивное значение или массив можно. Удалить переменную, ссылающуюся на объект или ноду нельзя. Можно удалить свойство объекта или массива ссылающееся на объект или ноду. Соответственно потеряеются только данное свойство и ссылка. Сам объект возможно удалится сборщиком мусора только если на него нет больше ссылок. Вот так получается, вот такая заморочка. (текст выложен на правах опровержимой аксиомы |
| Автор: Sardar 18.6.2005, 01:28 | ||||
Если почитаешь спецификацию от W3C, то узнаешь что:
О глобальных переменных и delete. Согласно ECMA-262 переменные обьявленные в "глобальном контексте" ключевым словом var не могут быть удаленны:
|
| Автор: Иль 18.6.2005, 02:07 | ||||||
Sardar, спсб. Тонко подмечено!
жуть, что я этого не знал, хотя вроде и не применял (завтра все перепроверю и попеределаю)
каюсь, как доделаю, возьмусь искать переводы. Можно и на Антглитском помучится - полезно будет Добавлено @ 02:08 |
| Автор: Aliance 18.6.2005, 18:08 | ||
Эм... да? Я такого тоже не знал или не понял что ты написал |
| Автор: Sardar 18.6.2005, 19:30 | ||||
Думаю это разьяснит:
Рефлекторным движением, по крайней мере у меня, хочеться вызвать removeChild на div:test |