Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.06.2017, 15:48
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

Удаление узла
Здравствуйте.
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    let img = document.createElement('img');
    img.setAttribute('src', '7.jpg');
    img.addEventListener('error', ()=>{console.log('ошибка'); img.remove();});/*Здесь!*/
    img.addEventListener( 'load', ()=>{console.log('загрузился я'); setTimeout(()=>{app.appendChild(img)},2000);});
</script>
</body>
</html>

Например, загружаю я картинку, а её, картинки, нет, но память то я выделил (пусть немного, но тем не менее). если в консоль ввести img, то мы получим
<img src="7.jpg">

как это удалить? я так понимаю, что эта фигня так и будет болтаться пока её явно не удалишь.
по аналогии с другими языками:
img = null; delete img;

ошибок код не вызывает, но насколько это корректно и как в такой ситуации правильно поступить?
Ответить с цитированием
  #2 (permalink)  
Старый 26.06.2017, 16:08
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Luca, ничего вычищать не нужно, почитайте про сборщик мусора.
Ответить с цитированием
  #3 (permalink)  
Старый 26.06.2017, 16:27
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

Сборщик мусора удаляет область памяти, если на эту область нет ссылок, те в данном случае
img = null;

но саму переменную img сборщик не удалит ведь.
имхо хотя бы img = null точно надо
Ответить с цитированием
  #4 (permalink)  
Старый 27.06.2017, 08:31
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,210

Сообщение от Luca
как это удалить?
Если так переживаешь - делай так.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
(function(){
    let img = document.createElement('img');
    img.setAttribute('src', '7.jpg');
    img.addEventListener('error', ()=>{console.log('ошибка'); img.remove();});/*Здесь!*/
    img.addEventListener( 'load', ()=>{console.log('загрузился я'); setTimeout(()=>{app.appendChild(img)},2000);});
})();
</script>
</body>
</html>

Или как там это пишут в новомоднем синтаксисе?
Ответить с цитированием
  #5 (permalink)  
Старый 27.06.2017, 11:33
Профессор
Отправить личное сообщение для Rasy Посмотреть профиль Найти все сообщения от Rasy
 
Регистрация: 17.06.2016
Сообщений: 509

Сообщение от ksa
Или как там это пишут в новомоднем синтаксисе?
http://es6-features.org/#BlockScopedFunctions
Ответить с цитированием
  #6 (permalink)  
Старый 28.06.2017, 06:08
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

img.remove();

первое, что сделал, но в ответ после этого
Цитата:
> img
><img src='7.jpg'></img>
и ничего не удаляется. и через парент пробовал. фиг знает ...
Цитата:
Или как там это пишут в новомоднем синтаксисе?
В этом плане, так как я начинающий, то для меня это, практически, единственный синтаксис. Притом во всех современных браузерах это работает и даже больше - async/await без транспайла. Еще кайф - это grid'ы, как начинающий, на них тоже ставку делаю.
Ответить с цитированием
  #7 (permalink)  
Старый 28.06.2017, 08:38
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,210

Сообщение от Luca
так как я начинающий, то для меня это, практически, единственный синтаксис
Идея в том, что нужно все сделать в анонимной функции.
После того как она отработает, все переменные, которые были в ней созданы исчезнут.

Если, конечно, не останется функций, которые смогут их использовать.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление дерева моделей Infarch ExtJS 1 18.07.2016 11:27
автоматическое удаление скоупа директивы при удаление dom узла FanAizu Angular.js 0 25.08.2015 21:38
Удаление или скрытие узла Aleandr Общие вопросы Javascript 0 13.01.2014 08:02
Как получить порядковый номер узла дерева относительно корня Shamandrey ExtJS 2 11.11.2013 10:48
Динамическое удаление строк таблицы Tankist Events/DOM/Window 16 03.07.2013 16:42