Вот небольшой шаткий код JavaScript, который выделился при обзоре полезной нагрузки вредоносной рекламы:

(function (a) {
  return a && a.parentNode && a.parentNode.removeChild(a)
 })(document.currentScript)

Давайте немного разберемся:

Метод Node.removeChild() удаляет дочерний узел из DOM. Возвращает удаленный узел.

document.currentScript — возвращает элемент <script>, сценарий которого обрабатывается в данный момент.

Так может быть, сценарий может удалить тег, который его вызвал, и продолжить работу? Оказывается, да. Если на первый взгляд это немного удивительно, возможно, это потому, что в этом нет особой необходимости, если, возможно, вам нечего скрывать.

Факт остается фактом: DOM сохраняет состояние и может изменяться, в то время как сам JavaScript работает в памяти. Эти двое никак не связаны друг с другом. Иногда легко упустить из виду, что это две совершенно разные сущности.

Давайте проверим это:

А теперь доказательство:

Похоже, все прошло по плану! Наш скрипт выполнил document.write, удалил себя из DOM, но все же смог продолжить выполнение и выполнить следующий document.write.