理解w3.includeHTML JavaScript函数的递归

时间:2017-07-07 12:16:46

标签: javascript html ajax innerhtml

以下JavaScript函数包含来自HTML标记内的文件的HTML,其中包含类" w3-include-html。"

有人可以解释为什么w3.includeHTML(cb),所以在函数中间再次调用函数本身?不会产生无限循环吗?任何帮助非常感谢。

w3.includeHTML = function(cb) {
  var z, i, elmnt, file, xhttp;
  z = document.getElementsByTagName("*");
  for (i = 0; i < z.length; i++) {
    elmnt = z[i];
    file = elmnt.getAttribute("w3-include-html");
    if (file) {
      xhttp = new XMLHttpRequest();
      xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
          elmnt.innerHTML = this.responseText;
          elmnt.removeAttribute("w3-include-html");
          w3.includeHTML(cb);
        }
      }      
      xhttp.open("GET", file, true);
      xhttp.send();
      return;
    }
  }
  if (cb) cb();
};

1 个答案:

答案 0 :(得分:0)

  

有人可以解释为什么w3.includeHTML(cb),所以函数本身会在函数中间再次被调用吗?

因为您包含的文件会尝试包含其他内容。

  

这不会产生无限循环吗?

不,因为前一行已从已完成包含的元素中删除了该属性。