可能的Javascript错误?

时间:2013-02-22 08:48:57

标签: javascript firefox

以下是代码示例:

<!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上测试过这个。

2 个答案:

答案 0 :(得分: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是应该责备的人,I have this code会将结果输出到DOM而不是使用console.log并且显示正确。

i = 0
while (i < 500) {
    date = new Date()
    $('body').append('<div>'+i+':'+date+'</div>');
    date.setHours(5);
    i++;
}

答案 1 :(得分:3)

console.log不是异步的,它只是动态的。使用逗号表示法记录日期对象时,您正在记录对该日期对象的实时引用,因此在更新时,控制台显示也是如此。如果您使用toString记录,则值不会更改:

console.log("logging date as string, i : " i + " date : " + date);