Удаление узла
Здравствуйте.
<!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; ошибок код не вызывает, но насколько это корректно и как в такой ситуации правильно поступить? |
Luca, ничего вычищать не нужно, почитайте про сборщик мусора.
|
Сборщик мусора удаляет область памяти, если на эту область нет ссылок, те в данном случае
img = null; но саму переменную img сборщик не удалит ведь. имхо хотя бы img = null точно надо |
Цитата:
<!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> Или как там это пишут в новомоднем синтаксисе? |
Цитата:
|
img.remove(); первое, что сделал, но в ответ после этого Цитата:
Цитата:
|
Цитата:
После того как она отработает, все переменные, которые были в ней созданы исчезнут. Если, конечно, не останется функций, которые смогут их использовать. :D |
Часовой пояс GMT +3, время: 11:26. |