不,Web浏览器中的JavaScript不仅是单线程的,而且与浏览器渲染共享同一个线程。如果您的JavaScript代码被阻塞,浏览器UI在此期间将变得无响应。
解决JavaScript中基于时间的事件的典型方法是使用异步计时器。John Resig以前写过一篇有趣的文章,名为“JavaScript计时器如何工作”,您可能想要查看。
更新:
你是否正在使用Google Visualization API来制作仪表盘?如果是的话,我认为Google已经处理了你尝试实现的平滑动画。请在Google Code Playground中尝试以下操作(注意网络仪表盘):
function drawVisualization() {
var data = new google.visualization.DataTable();
var chart;
data.addColumn('string', 'Label');
data.addColumn('number', 'Value');
data.addRows(3);
data.setValue(0, 0, 'Memory');
data.setValue(0, 1, 80);
data.setValue(1, 0, 'CPU');
data.setValue(1, 1, 55);
data.setValue(2, 0, 'Network');
data.setValue(2, 1, 68);
setTimeout(function () { data.setValue(2, 1, 20); chart.draw(data); }, 3000);
chart = new google.visualization.Gauge(document.getElementById('visualization'));
chart.draw(data);
}
setTimeout(function () { }, 1000);
,什么也不会发生。setTimeout()
函数将立即返回,JavaScript执行将继续进行。1秒后,超时将触发回调函数,该函数什么也不做...请记住,在Web浏览器中,JavaScript是事件驱动的。计时器是一个事件,就像鼠标单击一样。JavaScript执行由事件触发。如果没有事件发生,则不会执行任何JavaScript代码。如果JavaScript阻塞执行,浏览器将冻结。 - Daniel Vassallo