为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

我要冲钱 2016-12-07 00:33:42
<!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不再输出。不过,非嵌套的代码依然继续运行。

//img1.sycdn.imooc.com//584711660001692106500574.jpg


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

//img1.sycdn.imooc.com//584711880001b96f06520454.jpg

查看完整回答
4 反对 回复 2016-12-07
?
qq_hellohellola_03814043

TA贡献30条经验 获得超21个赞

div中的innerHTML为空,你可以用innerTEXT看一下效果。
查看完整回答
1 反对 回复 2016-12-07
  • 2 回答
  • 0 关注
  • 1270 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信