2

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>

http://shodor.org/~amalani/infinite.html

4

3 に答える 3

3

ログに記録されたメッセージの表示プロセスは、スクリプトから独立しています。スクリプトが無限ループで実行されている間、レンダラーがスクリプトをインターセプトし、キューに入れられたメッセージを表示する場合があります。

対照的に、保留中の解析ブロックスクリプトの実行が終了しdocument.writeたときに解析されるバッファに書き込みます。それだけでは終わらない…</p>

DOM を使用して新しい要素を追加すると、おそらく出力されます。

于 2013-03-23T14:37:53.730 に答える
2

Javascript が実行されていない場合、ページは再描画されます。ループを実行している場合、Javascript がまだ実行されているため、ページは再描画されません。ページで Javascript が実行されている間、コンソールが再描画される場合があります。

于 2013-03-23T14:37:58.990 に答える