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();
}
随后会运行doStuff
和doMoreStuff
,一秒钟后会运行otherStuff
。这就是为什么使用 setTimeout
作为延迟本身是无用且不可能的。如果 doMoreStuff
应该被推迟,你应该为延迟做回调:
function some() {
doStuff();
setTimeout(doMoreStuff, 1000);
}
或otherstuff
和doMoreStuff
延迟:
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));
我认为还有一个问题与此相关
为什么我们需要传递一个函数给Javascript setTimeOut https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setTimeout
为什么我们不能像
那样做简单的sgsetTimeOut(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();
}
随后会运行doStuff
和doMoreStuff
,一秒钟后会运行otherStuff
。这就是为什么使用 setTimeout
作为延迟本身是无用且不可能的。如果 doMoreStuff
应该被推迟,你应该为延迟做回调:
function some() {
doStuff();
setTimeout(doMoreStuff, 1000);
}
或otherstuff
和doMoreStuff
延迟:
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));
我认为还有一个问题与此相关