<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
</head>
<body>
<!--疑问代码块-->
<div id="con">
<script type="text/javascript">
document.write("absobute");
var A=document.getElementById("con");
document.write(A.innerHTML)
</script>
</div>
</body>
</html>是不是可以这样解释:把document,getElementById()放在指定标签的后代节点内,由于方法会遍历子节点,因此又再调用了此方法,然后进入循环。不过这明显不是死循环啊,只是文本重复很多次而已。怎么解释了?
2 回答
已采纳
qq_青枣工作室_0
TA贡献446条经验 获得超754个赞
这是死循环的。但是浏览器没有死循环,应该是浏览器的堆栈溢出了。循环到一定程度,嵌套的document.write就不再输出了。但是,后面的代码依然可以运行。
我用一段更加简单的代码来测试。
<!DOCTYPE html>
<script>
var i=0;
var script='<script>i++;console.log("before "+i);document.write(i+" ");console.log("after "+i);document.write(script);<\/script>';
document.write(script); // 嵌套到一定程度,就不会再输出
document.write('<br>end: ' + i+'<br>'); // 后面的代码依然可以继续运行
document.write(script); // 再来嵌套一次
document.write('<br>end: ' + i+'<br>');
document.write(script);
document.write('<br>end: ' + i+'<br>');
</script>在IE11上,提示堆栈溢出,嵌套的document.write不再输出。不过,非嵌套的代码依然继续运行。

Chrome上,没提示。但是可以看到,循环到一定程度,嵌套的document.write就不再输出了,非嵌套的代码继续运行。

添加回答
举报
0/150
提交
取消
