JS - очистка памяти (значений) [требует правки]

264
11 февраля 2017, 08:33

Всем привет, возникла такая проблема, пишу на JS недавно, уже много знаю относительно того, что знал, но вот проблема с увеличение кода появилась, заметил то, что например если обновить внутренне страницу (через JS (load, html)), то как-бы все функции всеровно получаются запущенными и в итоге я нажимаю на кнопку - срабатывает клик и выполняется функция аж 3 раза каким-то образом.

Вопрос собственно: Можно ли как-то разделить или очищать память после выполнения функции? Вроде есть return и еще что-то с event, но если это то самое - то не умею видимо пользоваться.

Answer 1

return false и event.preventdefault() не помогут в этом случае. Но есть такие методы:

Решение 1. Off()

//при загрузке страницы были какие-то обработчики onClick 
$("button").click(function(){ 
   console.log("function1") 
}) 
 
//... 
 
//через какое-то время 
$("button").off('click')//Отключаем все обработчики onClick 
 
$("button").click(function(){ 
   console.log("function2"); 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<button>test</button>

Решение 2. Назначем обработчики событий только при загрузке.

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

Для этого понадобится .on( events, selector, handler ) Пример:

//Вешаем обработчик только при загрузке страницы: 
$("#main").on("click","button",function(){ 
   console.log("function1") 
}) 
 
//... 
 
//через какое-то время добавляется кнопка: 
$("#main").append($("<button>test</button>"))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div id="main">

Answer 2

Статься тебе в помощь. https://learn.javascript.ru/memory-leaks

если ты делаешь обработчики событий

elem.onclick, то они не очищаются. так-же не очищаются все переменные выше по дереву

f1() 
function f1 (){ 
  var a = 'жру память'; 
  f2 () 
  function f2 (){ 
    document.onclick = function () { 
      console.log(a) 
    } 
  } 
}

Теперь куда бы ты не кликал на документе будет выводится в консоль )))))))

чтоб очистить память: document.onclick = null;

READ ALSO
Проблемы с Less

Проблемы с Less

Установил less глобальноНа Sublime Text 3 установил плагены Less и Less2css

252
Какие стили лучше задавать по умолчанию?

Какие стили лучше задавать по умолчанию?

При просмотре туториалов, связанных с версткой заметил, что часто перед началом работы, авторы задают какие-то стили по умолчанию, переопределяют...

298
Не обновляется CSS в Visual Studio 2015 при отладке

Не обновляется CSS в Visual Studio 2015 при отладке

Отлаживаю MVC приложение, вношу изменения в CSS в интерфейсе в VS, запускаю отладкуИ CSS остается старой версии до изменений

413
Как пересобрать .lib файл?

Как пересобрать .lib файл?

Есть у меняlib файл для старой версии Visual Studio

275