-1

次のコードは「JavaScriptbyExampleSecond Edition」からのもので、以下のコードの方が優れていると思います

function scroller() {
    str = str.substring(1, str.length) + str.substring(0, 1);
    document.title = str;
    window.status = str;
}
setInterval(scroller, 300);

古いコードは再帰的であり、プログラムが終了するまで0.3秒ごとに自分自身を呼び出し続けます。古いコードは、スタックオーバーフローを引き起こす可能性があると思いますよね?

<html>
<!-- This script is a modification of a free script found at
the JavaScript source.
Author: Asif Nasir (Asifnasir@yahoo.com)
-->
<head>
    <script type="text/javascript">
        var today = new Date();
        var year = today.getFullYear();
        var future = new Date("December 25, " + year);
        var diff = future.getTime() - today.getTime();
        // Number of milliseconds
        var days = Math.floor(diff / (1000 * 60 * 60 * 24));
        // Convert to days
        var str =
         "Only " + days + " shopping days left until Christmas!";
        function scroller() {
            str = str.substring(1, str.length) + str.substring(0, 1);
            document.title = str;
            window.status = str;
            setTimeout(scroller, 300); // Set the timer
        } 
    </script>
</head>
<body onload="scroller()">
    <b>
        <font color="green" size="4">
Get Dizzy. Watch the title bar and the status bar!!
<br />
<image src="christmasscene.bmp">
</font>
</body>
</html>
4

2 に答える 2

1

setInterval精度をあまり気にしない場合、たとえば、満たすべき条件をポーリングする場合などに適しています。

setTimeout1 回限りのイベントが必要な場合や、呼び出し間の間隔を調整する必要がある場合に適しています。

両方とも、ほぼ指定された間隔で継続的に実行されるイベントに使用できます。どちらもキャンセルできます。両方とも、指定された時間間隔の前後 (できるだけ早く) でのみ実行されます。

ちなみに、OP の最初のコード例はスタック オーバーフローを引き起こすべきではありませんが、それ以外の点ではあまり適切に記述されていません。

于 2012-10-12T02:20:46.077 に答える
1

ここを見てください:

「setInterval」と「setTimeout」

setTimeoutは、タイムアウト後にコード/関数を 1 回実行します。

setIntervalは、コード/関数を intervalで実行し、その間のタイムアウトの長さを指定します。

あなたがしていることについては、setIntervalを使用する必要があります。

于 2012-10-12T02:18:39.583 に答える