Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   удалить переменную из памяти (https://javascript.ru/forum/misc/23251-udalit-peremennuyu-iz-pamyati.html)

gradus 17.11.2011 19:34

удалить переменную из памяти
 
на сайте с помощью ajax загружаются остальные страницы.
Соответственно js код тоже новый подгружается.
Проблема в том что когда модули заменяются друг на друга, то js переменные висят в памяти от старого модуля.
Как сделать что бы их как буд-то и не было ? удалить полностью, функции, переменные и т.п. весь js код загруженный ранее на странице.

DjDiablo 17.11.2011 22:32

Удаляем обьекты в java script при помощи delete

// создадим переменную
var hello=100;

// проверим доступ к переменной, должно быть всё нормуль.
alert (hello);

// удаляем переменную
delete hello;

// эта строка выдаст ошибку, потому что переменную hello мы удалили
alert (hello);



Практично обьединить весь код страницы в один обьект к примеру page, чтобы удалить его разом.
Можно обойтись и без удаления, просто перезаписать старый обьект page, обьектом page из новой страницы.

также есть такая клёвая штука как конструкторы и деструкторы, пусть к примеру у каждой страницы будет конструктор и деструктор. Конструктор будет запускать плагины, подгружать данные, инициализировать переменный, вешать обработчики событий. А деструктор наоборот вырубать плагины, отвязывать обработчики событий, удалять глобальные обьекты (глобальные обьекты это зло !!!!!!), и тд. Открывается страница запускается конструктор, покидаешь запускается деструктор.

Естественно обьеденять и удалять всё надо самому, некакой волшебный метод за тебя эту работу делать не будет. Уборщик мусора не в счёт, он удаляет обьекты на который никто не ссылается.
Если обьект пользователю нафиг не нужен, но он к примеру в глобальной области видимости, то уборщик его никогда не тронет.

Kolyaj 17.11.2011 23:33

Цитата:

Сообщение от DjDiablo
Удаляем обьекты в java script при помощи delete

delete не удаляет переменные. Исключением являются переменные, объявленные внутри eval. Код на форуме выполняется, как раз, eval-ом. На обычной странице ваш код работать не будет.

trikadin 17.11.2011 23:38

DjDiablo, ff8, ничего не удалилось))

DjDiablo 17.11.2011 23:59

Главное что delete удалит лишние св-ва из обьектов, а лучше тупо перезаписать весь обьект, и хранить всё в нём а не в глобальной области видимости.

Да и кто сказал что нельзя удалить переменную из глобальной области ?
Все глобальные обьекты, это лишь св-ва обьекта window. Значит достаточно выпилить св-во c именем переменной из обьекта window.

Запускается теперь в фрейме, для чистоты эксперимента.
<script>
// создадим переменную
hello=100;

// проверим доступ к переменной, должно быть всё нормуль.
alert (hello);

// удаляем переменную
delete window["hello"];

// эта строка выдаст ошибку, потому что переменную hello мы удалили
alert (hello);
</script>

Kolyaj 18.11.2011 00:09

Цитата:

Сообщение от DjDiablo
// создадим переменную
hello=100;

Переменные создаются с ключевым словом var. Без него это будет просто свойство window. Поэтому и работает delete.

А вообще смысл топика не ясен. В JS есть сборщик мусора, он сам собирает ненужные переменные. Если на объект где-то осталась ссылка, значит он ещё нужен.

Skalean 11.02.2015 21:07

// создаем константу .
const TEXT = "Here is a simple text";
// объявляем константу TEXT .
document.write(TEXT);
// Ну и наконец удаляем его .
delete const TEXT;
// решил поделится :)

Царь Леонид 11.02.2015 21:13

Skalean,
Вот это поворот:)


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