Выделите код JS-кода перед удалением

Гарантируется ли этот код

function runEmbeddedJSInPageEnvironment(code) {
  var e = document.createElement('script');
  e.type = 'text/javascript';
  e.appendChild(document.createTextNode(code));
  (document.head || document.documentElement).appendChild(e);
  e.parentNode.removeChild(e);
}

runEmbeddedJSInPageEnvironment("$('#someform').off('submit');");

будет ждать завершения кода, прошедшего в runEmbeddedJSInPageEnvironment, и только затем удалить его со страницы, вызвав функцию removeChild?

Или он может быть удален до завершения этого кода?

Ответ 1

Да, в соответствии с HTML5 код запускается перед удалением элемента script.

Когда вы вставляете его в документ, он немедленно подготовлен:

Когда элемент script, который не помечен как "parser-insert" содержит одно из событий, перечисленных в в следующем списке пользовательский агент должен синхронно prepare script element:

На шаге 15 подготовьте алгоритм script, поскольку script не имеет src и не был помечен как "парсер вставлен" , ваше дело будет быть последним:

В противном случае: Пользовательский агент должен немедленно выполнить scriptблок, даже если другие скрипты уже выполняются.

Но, конечно, если script имеет асинхронный код, например setTimeout, это будет отложено.