Javascript JS:何时执行动态插入的脚本?

Javascript JS:何时执行动态插入的脚本?,javascript,html,dom,Javascript,Html,Dom,我想在头部顶部执行一个AJAX调用,完成后,根据AJAX调用的结果插入一个包含其内容的脚本。大概是这样的: var request = new XMLHttpRequest(); request.open('GET', 'https://mypage.com/'); request.setRequestHeader('Accept', 'application/json'); request.onreadystatechange = function () { if (thi

我想在头部顶部执行一个AJAX调用,完成后,根据AJAX调用的结果插入一个包含其内容的脚本。大概是这样的:

var request = new XMLHttpRequest();
  request.open('GET', 'https://mypage.com/');
  request.setRequestHeader('Accept', 'application/json');
  request.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
      var result = JSON.parse(this.responseText);
      if (result.foo === 'bar') {
        insertScript('bar');
      } else {
        insertScript('not bar');
      }
    }
  };
  request.send();
}
插入脚本代码:

function insertScript (msg) {
  var script = document.createElement("script");
  var content = "console.log('" + msg + "');";
  var inlineScript = document.createTextNode(content);
  script.appendChild(inlineScript);
  document.head.appendChild(script);
}

所以现在我想知道:脚本什么时候执行?我希望它尽可能快地执行。它附着在头上。如果dom解析器已经到达主体,该怎么办?它会停止并首先在头部执行新脚本吗?它会呈现所有内容,然后执行脚本吗?

它会立即执行脚本。但是,为了安全起见,您可以插入一个自执行函数,如下所示:-

var script = document.createElement("script");
var content = "(function selfCallableFunction(){console.log('" + msg + "');})()";
var inlineScript = document.createTextNode(content);
script.appendChild(inlineScript);
document.head.appendChild(script);

由于
XMLHttpRequest
是异步的,因此已经到达并解析了主体。如果确定它将在
head.appendChild
调用期间执行。当您使用DOM时,不会发出带有
文档的html。write
,解析器的当前状态是什么并不重要。很高兴知道!所以实际上,我把脚本放在哪里也无关紧要,我是把它插入头部还是身体?使用自执行函数有什么更安全?防止变量重写?自执行方法始终是更好的方法。它创建一个闭包范围并防止变量名冲突。