编写一个Javascript函数来打印数字1-10,每个数字以1s的间隔打印
我被问到一个挑战性的问题:如何编写一个Javascript函数来打印数字1-10,每个数字每隔1秒打印一次。我必须在不使用“setInterval”或“setTimeout”的情况下执行此操作。这是有意义的,因为这些函数是异步的,循环不会暂停并等待超时时间。所以我决定使用Date创建一个暂停函数。不幸的是,这不起作用。这是我到目前为止得到的。我不知道为什么它不起作用。有人对如何解决这个问题有什么想法吗编写一个Javascript函数来打印数字1-10,每个数字以1s的间隔打印,javascript,datetime,timeout,settimeout,setinterval,Javascript,Datetime,Timeout,Settimeout,Setinterval,我被问到一个挑战性的问题:如何编写一个Javascript函数来打印数字1-10,每个数字每隔1秒打印一次。我必须在不使用“setInterval”或“setTimeout”的情况下执行此操作。这是有意义的,因为这些函数是异步的,循环不会暂停并等待超时时间。所以我决定使用Date创建一个暂停函数。不幸的是,这不起作用。这是我到目前为止得到的。我不知道为什么它不起作用。有人对如何解决这个问题有什么想法吗 function pause(milliseconds) { var dt = new
function pause(milliseconds) {
var dt = new Date();
while ( (new Date()) - dt <= milliseconds) { /* Do nothing */ }
}
function printNumbers(){
var i = 1;
var temp = "";
while(i<=10){
temp += i + " ";
document.getElementById("mydiv").innerHTML = temp;
pause(1000);
i++;
}
}
printNumbers();
功能暂停(毫秒){
var dt=新日期();
而((new Date())-dt只要某个JS正在运行,浏览器就不会呈现DOM,除非您的代码可以正常工作。只需替换
document.getElementById("mydiv").innerHTML = temp;
与
问题在于您希望以何种方式查看输出。当前浏览器的行为是在看到javascript块或脚本包含时立即阻止HTML渲染(除非另有说明,否则您选择在渲染完成后将其排除)
此外,除非您延迟(使用settimeout、promise等)代码,否则所有javascript都将在单个线程中运行,并且不允许任何东西接管
因此,您将无法在浏览器上看到您想要看到的输出。在节点上运行相同的代码,并使用控制台按预期运行。为什么不工作?您会遇到什么错误?嗯。我测试了它。如果您只在控制台中记录它,它就会工作。但是如果您尝试更新dom,它会等待javascript完成。并且同样的问题是这样的:你可以用setTimeout解决它…谢谢你Soumitra的解释。但是我还是很困惑。我肯定我以前在浏览器中看到过这样的动画。还有什么其他方法可以达到这种效果呢?我没有主意。有一种方法可以做到这一点,我是说更新dom。你可以做的就是移动这是服务工作者的逻辑。使用postMessage每秒钟向主线程发送一次消息以更新dom。谢谢你。请参阅我对上面Soumitra帖子的评论。
console.log(temp);