在javascript中,如果你使用console.log进行无限循环,它会将所有内容写入控制台,直到它溢出。但是,如果使用document.write执行此操作,则在无限循环中,它将冻结页面并且不会加载任何内容。有谁知道这个的原因?
示例就在这里
<html>
<head>
<script type='text/javascript'>
var x = 0;
function conslog() {
var x = 0;
while (1) {
console.log(x);
x++;
}
}
function dowrite() {
var x = 0;
while (1) {
document.write(x);
x++;
}
}
</script>
</head>
<body>
<button type='button' onClick='conslog()'>console</button>
<button type='button' onClick='dowrite()'>write</button>
</body>
</html>
答案 0 :(得分:3)
记录消息的查看过程与脚本无关。当脚本在无限循环中运行时,渲染器有时会拦截它并显示排队的消息。
相反,document.write
会写入一个缓冲区,该缓冲区将在pending parsing-blocking script完成运行时进行解析。只有它没有完成......
如果您使用DOM附加新元素,它们可能会输出。
答案 1 :(得分:2)
当Javascript未执行时,页面将重新绘制,如果它正在运行循环,则页面将不会重绘,因为Javascript仍在执行。当Javascript在页面上运行时,控制台可能会重新绘制。
答案 2 :(得分:0)
很可能是因为HTML页面的大小没有限制,但控制台调试日志会是什么?我猜你的CPU负载也上升了,而浏览器实际上只是处理一个循环。我猜这是代码的形式while (1) { console.log ("something") };
?
您没有说明这是什么浏览器,因此您可能会发现不同的浏览器具有不同的控制台日志行为。将它作为增长列表或环形缓冲区实现的那些也可能会使浏览器挂起。