Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как правильно удалить функцию (https://javascript.ru/forum/misc/55359-kak-pravilno-udalit-funkciyu.html)

zhurchik 24.04.2015 14:50

Как правильно удалить функцию
 
Здравствуйте.
Как правильно удалить функцию?

Я пришел к, по сути, двум вариантам:

function myfunc () {
//Здесь какой-то код
}

// 1 вариант
myfunc = null;
// 2
var myfunc = null;
// 3
function myfunc () {};


Какой по-вашему корректный способ и, желательно, почему? Или есть совершенно другой способ удаления функции?

vasa_c 24.04.2015 16:44

с какой целью?

zhurchik 24.04.2015 16:52

vasa_c,
Сайт полностью динамический, поэтому нужно мусор удалять при переходе на ту или иную страницу.
К примеру:
Если функция myfunc существую, значит в ней есть мусор (классы, события и пр.), и прежде чем подгрузить новые данные удаляем те, что содержит эта функция, а затем саму функцию. И при переходе на следующую страницу, если функции нет, значит и мусора нет, а если есть, выполняем туже процедуры, которую я выше описал.

Erolast 24.04.2015 17:00

Возьми какой-нибудь UI-фреймворк/либу (react, backbone, angular) и не трахай мозг)

Ну, а касательно задачи - первый вариант, конечно же, он единственный логически верный.

zhurchik 24.04.2015 17:06

Erolast,
Все проблема не в том, чтобы написать сайт, а в том, чтобы набраться опыта, научиться работать с голым JS. Фреймворки использовать проще простого!

vasa_c 24.04.2015 17:06

В функции нет мусора, кроме её самой.
Мусор в конкретных контекстах вызовов.

zhurchik 24.04.2015 17:14

vasa_c,
К примеру:
При переходи на страницу приватной переписки, в конце всего кода JS создается функция
// И вот ее содержимое должно быть уничтожено до того как сама функция канет в лето
destroy function()
{
    clearTimeout(idTimeout); //Т.к. сообщ. подгружаются динамически, то при переходе на другую страницу убиваем таймер, чтобы сообщения в некуда не подгружались

  // Массив с ключом http['DR'] содержит объект XHR и если при переходе на другую страницу как раз таки осуществляется запрос для получения новых данных, то отменяем его
  if (typeof http['DR'] != "undefined") {
	http['DR'].abort();
	delete http['DR'];
  }

 // ..... И так далее... Удаляем другие данные, если требуется
}

Erolast 24.04.2015 19:08

Цитата:

Все проблема не в том, чтобы написать сайт, а в том, чтобы набраться опыта, научиться работать с голым JS. Фреймворки использовать проще простого!
Ну, во-первых, правильный программист всегда пытается облегчить себе задачу, во-вторых - научиться пользоваться фреймворками как раз непросто, и именно с ними ты будешь набираться опыта: научишься строить более высокоуровневые абстракции, изучишь новые подходы, архитектурные паттерны, возможности, тонкости языка. Работая с чистым языком с собственными велосипедами ты только погрязнешь в говне, уж поверь, я сам это проходил.

zhurchik 24.04.2015 19:56

Erolast,
Я с вами согласен, но, как мне кажется, чтобы браться за изучение того или иного фреймворка, нужно понимать как устроен, так скажем, низкий уровень языка программирования.

jscripter 25.04.2015 10:32

Если ты хочешь удалять и ф-цию и ссылку на нее, не используй function declaration, делай так:
foo=function (){}
alert(delete foo)
// true

вторые 2 способа фактически равноценны, 3-й способ имеет смысла, ты там вместо одного объекта функции ложешь в память другой объект, хрен нахрен меняешь.


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