Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编写一个Javascript函数来打印数字1-10,每个数字以1s的间隔打印_Javascript_Datetime_Timeout_Settimeout_Setinterval - Fatal编程技术网

编写一个Javascript函数来打印数字1-10,每个数字以1s的间隔打印

编写一个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

我被问到一个挑战性的问题:如何编写一个Javascript函数来打印数字1-10,每个数字每隔1秒打印一次。我必须在不使用“setInterval”或“setTimeout”的情况下执行此操作。这是有意义的,因为这些函数是异步的,循环不会暂停并等待超时时间。所以我决定使用Date创建一个暂停函数。不幸的是,这不起作用。这是我到目前为止得到的。我不知道为什么它不起作用。有人对如何解决这个问题有什么想法吗

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);