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-й способ имеет смысла, ты там вместо одного объекта функции ложешь в память другой объект, хрен нахрен меняешь.

Erolast 25.04.2015 20:21

Таков подход запрещен в ES5.

fuckjava 25.04.2015 20:51

Цитата:

Сообщение от Erolast
Таков подход запрещен в ES5.

не надо путать es5 с опциональным режимом. Это сильно разные вещи. Кстати, другого адекватного способа, просто нет.

Erolast 25.04.2015 21:11

Цитата:

Кстати, другого адекватного способа, просто нет.
functionName = null;

Цитата:

не надо путать es5 с опциональным режимом. Это сильно разные вещи.
В ES5 таков подход запрещен. Опциональный режим включает семантику ES5.

fuckjava 25.04.2015 21:21

Цитата:

Сообщение от Erolast
functionName = null;

Речь идет о
Цитата:

Если ты хочешь удалять и ф-цию и ссылку на нее
Цитата:

Сообщение от Erolast
В ES5 таков подход запрещен. Опциональный режим включает семантику ES5.

Это какой-то феерический бред. Пруф будет?

Erolast 25.04.2015 21:28

Цитата:

Пруф будет?
Я уже давал, еще раз не собираюсь. Посмотри в ответах на посты своих прошлых инкарнаций.

fuckjava 25.04.2015 21:35

Цитата:

Сообщение от Erolast
Я уже давал, еще раз не собираюсь

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

kirat 06.08.2017 17:23

Цитата:

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

Абсолютно точно


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