Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.11.2011, 19:34
Интересующийся
Отправить личное сообщение для gradus Посмотреть профиль Найти все сообщения от gradus
 
Регистрация: 18.02.2011
Сообщений: 24

удалить переменную из памяти
на сайте с помощью ajax загружаются остальные страницы.
Соответственно js код тоже новый подгружается.
Проблема в том что когда модули заменяются друг на друга, то js переменные висят в памяти от старого модуля.
Как сделать что бы их как буд-то и не было ? удалить полностью, функции, переменные и т.п. весь js код загруженный ранее на странице.
Ответить с цитированием
  #2 (permalink)  
Старый 17.11.2011, 22:32
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

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

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

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

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

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



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

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

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

Последний раз редактировалось DjDiablo, 17.11.2011 в 23:17.
Ответить с цитированием
  #3 (permalink)  
Старый 17.11.2011, 23:33
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от DjDiablo
Удаляем обьекты в java script при помощи delete
delete не удаляет переменные. Исключением являются переменные, объявленные внутри eval. Код на форуме выполняется, как раз, eval-ом. На обычной странице ваш код работать не будет.
Ответить с цитированием
  #4 (permalink)  
Старый 17.11.2011, 23:38
Аватар для trikadin
Модератор
Отправить личное сообщение для trikadin Посмотреть профиль Найти все сообщения от trikadin
 
Регистрация: 27.04.2010
Сообщений: 3,417

DjDiablo, ff8, ничего не удалилось))
__________________
Читайте:
Ты любопытный) Всё-таки, ничему в этом мире не помешает хорошая доля юмора)
Как спросить, чтобы вам ответили
Часто Задаваемые Вопросы (FAQ)
Ответить с цитированием
  #5 (permalink)  
Старый 17.11.2011, 23:59
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

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

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

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

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

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

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

Последний раз редактировалось DjDiablo, 18.11.2011 в 00:09.
Ответить с цитированием
  #6 (permalink)  
Старый 18.11.2011, 00:09
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от DjDiablo
// создадим переменную
hello=100;
Переменные создаются с ключевым словом var. Без него это будет просто свойство window. Поэтому и работает delete.

А вообще смысл топика не ясен. В JS есть сборщик мусора, он сам собирает ненужные переменные. Если на объект где-то осталась ссылка, значит он ещё нужен.
Ответить с цитированием
  #7 (permalink)  
Старый 11.02.2015, 21:07
Новичок на форуме
Отправить личное сообщение для Skalean Посмотреть профиль Найти все сообщения от Skalean
 
Регистрация: 24.06.2014
Сообщений: 1

// создаем константу .
const TEXT = "Here is a simple text";
// объявляем константу TEXT .
document.write(TEXT);
// Ну и наконец удаляем его .
delete const TEXT;
// решил поделится
Ответить с цитированием
  #8 (permalink)  
Старый 11.02.2015, 21:13
Профессор
Отправить личное сообщение для Царь Леонид Посмотреть профиль Найти все сообщения от Царь Леонид
 
Регистрация: 22.08.2013
Сообщений: 217

Skalean,
Вот это поворот
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать переменную с jquery в php Максим2 jQuery 14 28.07.2013 11:38
Не могу выбрать и удалить клонируемые элементы AlexPrm jQuery 6 30.05.2010 15:58
Как удалить из памяти весь XML документ? EisBerg Events/DOM/Window 1 03.04.2010 14:45
Утечки памяти: как сделать ? Draeden Events/DOM/Window 10 30.08.2009 18:16
Как обозначить переменную выбранную в FileChooser? woo_hoo Общие вопросы Javascript 4 03.07.2008 12:58