猿问

一段很奇怪的代码?大神能解释下吗?

<!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()放在指定标签的后代节点内,由于方法会遍历子节点,因此又再调用了此方法,然后进入循环。不过这明显不是死循环啊,只是文本重复很多次而已。怎么解释了?

我要冲钱
浏览 1271回答 2
2回答

qq_青枣工作室_0

这是死循环的。但是浏览器没有死循环,应该是浏览器的堆栈溢出了。循环到一定程度,嵌套的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就不再输出了,非嵌套的代码继续运行。

qq_hellohellola_03814043

div中的innerHTML为空,你可以用innerTEXT看一下效果。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答