就我所知,没有办法让setTimeout同步运行。
我有这个代码,其中foo是一个相当长的函数(20行左右)。
if(delay == null){
function foo(){
}()
}
else {
setTimeout(function(){
function foo(){
}()
}, delay);
}
非常方便的是,如果setTimeout接受-1的延迟参数,然后就会同步/立即运行,如下所示:
var delay = delay || -1;
setTimeout(function(){
function foo(){
}()
}, delay); // if delay is -1, will run immediately.
我认为这个功能不适用于setTimeout,是否有另一种方法可以防止必须两次写出foo函数?我唯一的好解决方案是创建一个辅助函数,但这不方便:)
答案 0 :(得分:3)
试试这个:
<hr>
<div>
<iframe width="560" height="315" src="https://www.youtube.com/embed/czpFFcw6Yfk" frameborder="0" allowfullscreen></iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/r2u2FS-gWmo" frameborder="0" allowfullscreen></iframe>
<div>
<iframe width="560" height="315" src="https://www.youtube.com/embed/MvjlUrWo1KQ" frameborder="0" allowfullscreen></iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/F8qDtzlkFws" frameborder="0" allowfullscreen></iframe>
</div>
答案 1 :(得分:1)
还有另一种方法可以防止必须两次写出
foo
功能吗?
是的。
定义foo
:
function foo() {
}
然后在delay === -1
时立即运行,否则在setTimeout
:
if (delay === -1)
foo();
else
setTimeout(foo, delay);
答案 2 :(得分:0)
这确实很老,但是您可以仅使用内联条件来设置时间延迟。
setTimeout(foo, isDelay ? delay : 0)