24.04.2015, 14:50
|
Кандидат Javascript-наук
|
|
Регистрация: 04.06.2011
Сообщений: 116
|
|
Как правильно удалить функцию
Здравствуйте.
Как правильно удалить функцию?
Я пришел к, по сути, двум вариантам:
function myfunc () {
//Здесь какой-то код
}
// 1 вариант
myfunc = null;
// 2
var myfunc = null;
// 3
function myfunc () {};
Какой по-вашему корректный способ и, желательно, почему? Или есть совершенно другой способ удаления функции?
|
|
24.04.2015, 16:44
|
|
Профессор
|
|
Регистрация: 12.03.2008
Сообщений: 183
|
|
с какой целью?
|
|
24.04.2015, 16:52
|
Кандидат Javascript-наук
|
|
Регистрация: 04.06.2011
Сообщений: 116
|
|
vasa_c,
Сайт полностью динамический, поэтому нужно мусор удалять при переходе на ту или иную страницу.
К примеру:
Если функция myfunc существую, значит в ней есть мусор (классы, события и пр.), и прежде чем подгрузить новые данные удаляем те, что содержит эта функция, а затем саму функцию. И при переходе на следующую страницу, если функции нет, значит и мусора нет, а если есть, выполняем туже процедуры, которую я выше описал.
|
|
24.04.2015, 17:00
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Возьми какой-нибудь UI-фреймворк/либу (react, backbone, angular) и не трахай мозг)
Ну, а касательно задачи - первый вариант, конечно же, он единственный логически верный.
|
|
24.04.2015, 17:06
|
Кандидат Javascript-наук
|
|
Регистрация: 04.06.2011
Сообщений: 116
|
|
Erolast,
Все проблема не в том, чтобы написать сайт, а в том, чтобы набраться опыта, научиться работать с голым JS. Фреймворки использовать проще простого!
|
|
24.04.2015, 17:06
|
|
Профессор
|
|
Регистрация: 12.03.2008
Сообщений: 183
|
|
В функции нет мусора, кроме её самой.
Мусор в конкретных контекстах вызовов.
|
|
24.04.2015, 17:14
|
Кандидат Javascript-наук
|
|
Регистрация: 04.06.2011
Сообщений: 116
|
|
vasa_c,
К примеру:
При переходи на страницу приватной переписки, в конце всего кода JS создается функция
// И вот ее содержимое должно быть уничтожено до того как сама функция канет в лето
destroy function()
{
clearTimeout(idTimeout); //Т.к. сообщ. подгружаются динамически, то при переходе на другую страницу убиваем таймер, чтобы сообщения в некуда не подгружались
// Массив с ключом http['DR'] содержит объект XHR и если при переходе на другую страницу как раз таки осуществляется запрос для получения новых данных, то отменяем его
if (typeof http['DR'] != "undefined") {
http['DR'].abort();
delete http['DR'];
}
// ..... И так далее... Удаляем другие данные, если требуется
}
Последний раз редактировалось zhurchik, 24.04.2015 в 17:16.
|
|
24.04.2015, 19:08
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
Все проблема не в том, чтобы написать сайт, а в том, чтобы набраться опыта, научиться работать с голым JS. Фреймворки использовать проще простого!
|
Ну, во-первых, правильный программист всегда пытается облегчить себе задачу, во-вторых - научиться пользоваться фреймворками как раз непросто, и именно с ними ты будешь набираться опыта: научишься строить более высокоуровневые абстракции, изучишь новые подходы, архитектурные паттерны, возможности, тонкости языка. Работая с чистым языком с собственными велосипедами ты только погрязнешь в говне, уж поверь, я сам это проходил.
Последний раз редактировалось Erolast, 24.04.2015 в 19:16.
|
|
24.04.2015, 19:56
|
Кандидат Javascript-наук
|
|
Регистрация: 04.06.2011
Сообщений: 116
|
|
Erolast,
Я с вами согласен, но, как мне кажется, чтобы браться за изучение того или иного фреймворка, нужно понимать как устроен, так скажем, низкий уровень языка программирования.
|
|
25.04.2015, 10:32
|
Интересующийся
|
|
Регистрация: 25.04.2015
Сообщений: 4
|
|
Если ты хочешь удалять и ф-цию и ссылку на нее, не используй function declaration, делай так:
foo=function (){}
alert(delete foo)
// true
вторые 2 способа фактически равноценны, 3-й способ имеет смысла, ты там вместо одного объекта функции ложешь в память другой объект, хрен нахрен меняешь.
|
|
|
|