Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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 Js:setTimeOut没有函数参数?_Javascript_Timeout_Settimeout - Fatal编程技术网

Javascript Js:setTimeOut没有函数参数?

Javascript Js:setTimeOut没有函数参数?,javascript,timeout,settimeout,Javascript,Timeout,Settimeout,为什么我们需要将函数传递给Javascript setTimeOut 为什么我们不能像这样做 setTimeOut(1000); 我可以传递一个空的或不存在的函数吗 我只想在每次迭代后在for循环中等待。setTimeout在事件循环中注册偶数。JavaScript完成所有当前指令后,将返回事件循环并等待事件发生。当它这样做时,它调用回调函数,这是传递给setTimeout的函数 要使用setTimeout执行for循环,请执行以下操作: function loop(i, n) { d

为什么我们需要将函数传递给Javascript setTimeOut

为什么我们不能像这样做

setTimeOut(1000);
我可以传递一个空的或不存在的函数吗


我只想在每次迭代后在for循环中等待。

setTimeout在事件循环中注册偶数。JavaScript完成所有当前指令后,将返回事件循环并等待事件发生。当它这样做时,它调用回调函数,这是传递给setTimeout的函数

要使用setTimeout执行for循环,请执行以下操作:

function loop(i, n) {
    doStuff();
    if (i < n) {
        setTimeout(function() {
            loop(i+1, n);
        }, 1000);
    }
};
loop(0, 10);
函数循环(i,n){
doStuff();
if(i
其中i是当前迭代,n是最大迭代


如果JavaScript不在事件循环中,即它正在运行代码,则会使整个浏览器无响应。只需空转一秒钟就可以做到这一点,因此,如果在循环中迭代10次,浏览器将在10秒钟内无响应,Javascript是单线程的。您可以使用
setTimemout
延迟操作,但线程将继续。所以

function some() {
  doStuff();
  setTimeout(otherStuff, 1000);
  doMoreStuff();
}
随后将运行
doStuff
doMoreStuff
,并在一秒钟后运行
otherStuff
。这就是为什么使用
setTimeout
作为延迟本身是无用的,也是不可能的。如果
doMoreStuff
应该延迟,您应该为延迟进行回调:

function some() {
  doStuff();
  setTimeout(doMoreStuff, 1000);
}
或者同时使用
otherstuff
doMoreStuff
延迟:

function some() {
  doStuff();
  setTimeout(function () {
               otherStuff();
               doMoreStuff()
             }, 1000);
}
也许我的答案也有用

-->
设置超时(callbackFunction[,interval])

这是可以理解的,因为您将在指定时间后使用指定名称(由您给定)调用函数

-->您不能这样做
设置超时(1000)因为1000将被视为回调函数,因为
setTimeout()的第一个参数是回调函数

不能定义像这样的函数

函数1000(){
//代码驻留在这里。
}

因为java脚本不允许这些类型的函数名

-->您可以将匿名函数传递给
setTimeout()
like

setTimeout(函数(){
//代码驻留在这里。
}[,区间];
上述功能代码将在给定间隔后执行。如果没有给出间隔,则将立即执行

注意:-方括号中给出的参数[,]是可选的

-->您可以参考下面提到的线程供您使用:


因为此线程包含一个函数定义,它在其他语言中的工作方式类似于
sleep()

现在,通过一行快速的wait/Async,这是可能的:

await new Promise(resolve => setTimeout(resolve, 1000));
我认为还有一个问题与此相关

你是说像PHP中的
sleep()
方法?Javascript中没有这样的东西。你必须用
setTimeOut
setInterval
来完成。没错:)php中的sleep()非常方便。我知道……希望他们正在处理:)不会发生。它违背了JavaScriptI的所有原则,我发现了这个选项:setTimeout(()=>{dosomething},time);但我找不到这方面的文件。但是它是有效的。@Kooilnc这些解决方案在这篇文章中有多好?:。您发布了一个很好的解决方案,但是链接中的解决方案只适用于两次迭代。经过两次以上的迭代,它只会继续激发并返回随机数。在过去的几年里,浏览器处理循环超时的方式有没有变化?@Mikey:检查我链接的问题的答案,并检查答案中的jsfiddle()谢谢。解释了很多。