3

コードサンプルは次のとおりです。

<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <script>
            i = 0
            while(i < 500)
            {
                date = new Date()
                console.log(i, ' ', date);
                date.setHours(5)
                i++  
            }

        </script>

    </head>
    <body>
    </body>
</html>

firebug コンソールは最終的に、変更されていない元の日付ではなく、5 時間に設定された日付を出力します。これは Firefox 17 でのみテストしました。

4

2 に答える 2

4

それは、ブラウザのconsole.log. 私の知る限り、ブラウザには非同期console.log機能があり、Chrome にも当てはまります。非同期関数の実行は、ブラウザーが処理を行っていない場合にのみ行われます。

while (i < 500) {
    date = new Date()
    console.log(i, ' ', date); //this set aside
    date.setHours(5); //this executed first instead
    i++;
}

console.logそれが原因であることを証明するために、使用する代わりにDOMに結果を出力するこのコードconsole.logがあり、それが正しく表示されます。

i = 0
while (i < 500) {
    date = new Date()
    $('body').append('<div>'+i+':'+date+'</div>');
    date.setHours(5);
    i++;
}
于 2013-02-22T08:55:02.717 に答える
3

console.log は非同期ではなく、単純に動的です。コンマ表記を使用して日付オブジェクトをログに記録すると、その日付オブジェクトへのライブ参照がログに記録されるため、更新時にコンソール表示も更新されます。代わりに toString を使用してログインした場合、値は変更されません。

console.log("logging date as string, i : " i + " date : " + date);
于 2013-02-22T09:14:43.437 に答える