Js:没有函数参数的setTimeOut?

Js: setTimeOut without function argument?

为什么我们需要传递一个函数给Javascript setTimeOut https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setTimeout

为什么我们不能像

那样做简单的sg
setTimeOut(1000);

我可以在其中传递一个空的或不存在的函数吗?

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

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

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

function loop(i, n) {
    doStuff();
    if (i < n) {
        setTimeout(function() {
            loop(i+1, n);
        }, 1000);
    }
};
loop(0, 10);

其中 i 是当前迭代次数,n 是最大迭代次数

当 JavaScript 不在事件循环中时,即它是 运行 代码时,它会使整个浏览器无响应。只要闲置一秒钟就可以做到这一点,所以如果你在一个循环中迭代 10 次,浏览器将在 10 秒内没有响应

Javascript 是单线程的。您可以使用 setTimemout 推迟操作,但线程将继续。所以

function some() {
  doStuff();
  setTimeout(otherStuff, 1000);
  doMoreStuff();
}

随后会运行doStuffdoMoreStuff,一秒钟后会运行otherStuff。这就是为什么使用 setTimeout 作为延迟本身是无用且不可能的。如果 doMoreStuff 应该被推迟,你应该为延迟做回调:

function some() {
  doStuff();
  setTimeout(doMoreStuff, 1000);
}

otherstuffdoMoreStuff延迟:

function some() {
  doStuff();
  setTimeout(function () {
               otherStuff();
               doMoreStuff()
             }, 1000);
}

也许我对 this SO-question 的回答也很有用。

--> setTimeout(callbackFunction[, interval])

这可以理解为您将在指定时间后调用具有指定名称(由您提供)的函数。

--> 你不能这样做 setTimeOut(1000); 因为 1000 将被视为回调函数 因为 setTimeout() 的第一个参数是回调函数。

你不能定义像

这样的函数

function 1000() { // Code Resides here. }

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

--> 你可以像

一样将匿名函数传递给setTimeout()

setTimeout(function() { // Code resides here. }[, interval]); 上面的函数代码将在给定的时间间隔后执行。如果没有给定间隔,那么它会立即执行。

注:-方括号([])中给出的参数可选通过。

--> 您可以参考下面提到的线程供您使用: JavaScript sleep/wait before continuing

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

现在可以使用 Await/Async 快速一行:

await new Promise(resolve => setTimeout(resolve, 1000));

我认为还有一个问题与此相关