以下是代码示例:
<!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上测试过这个。
答案 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);