Javascript 执行window.setTimeout哪个更好

Javascript 执行window.setTimeout哪个更好,javascript,settimeout,Javascript,Settimeout,执行window.setTimeout哪个选项更好?为什么 备选方案A: window.setTimeout(somefunc,0); 备选案文B: window.setTimeout(somefunc,n); //n may be any number >0 谢谢。选项A只需调用somefunc,额外的开销是不必要地调用setTimeout(因为第二个参数意味着0毫秒的延迟)。如果您打算在执行somefunc之前进行延迟,则选项B适用。请您详细说明一下,或者这是否回答了您的问题?选项

执行window.setTimeout哪个选项更好?为什么

备选方案A:

window.setTimeout(somefunc,0);
备选案文B:

window.setTimeout(somefunc,n); //n may be any number >0

谢谢。

选项A只需调用
somefunc
,额外的开销是不必要地调用
setTimeout
(因为第二个参数意味着0毫秒的延迟)。如果您打算在执行
somefunc
之前进行延迟,则选项B适用。请您详细说明一下,或者这是否回答了您的问题?

选项a只需调用
somefunc
,额外的开销是不必要地调用
setTimeout
(因为第二个参数意味着0毫秒的延迟)。如果您打算在执行
somefunc
之前进行延迟,则选项B适用。请你详细说明一下,或者这能回答你的问题吗?

这取决于你想做什么

setTimeout(somefunc,0)
与只调用somefunc没有太大区别
(但我猜
.setTimeout(somefunc,0)
将首先完成当前块,然后调用
somefunc


如果您需要等待浏览器渲染,然后运行
somefunc
,请使用
window.onload
或jQuery的
$(document.ready

,这取决于您想做什么

window.setTimeout(somefunc,0);
setTimeout(somefunc,0)
与只调用somefunc没有太大区别
(但我猜
.setTimeout(somefunc,0)
将首先完成当前块,然后调用
somefunc

如果需要等待浏览器渲染,然后运行
somefunc
,请使用
window.onload
或jQuery的
$(document).ready

window.setTimeout(somefunc,0);
将立即运行somefunc(但在继续之前不会等待返回值)

在运行somefunc之前将等待n毫秒(但不会等待它启动或返回后再继续)

或者,如果在没有超时的情况下调用
somefunc()
,它将运行somefunc,但等待它完成后再继续

将setTimeout视为“启动”一个新线程

将立即运行somefunc(但在继续之前不会等待返回值)

在运行somefunc之前将等待n毫秒(但不会等待它启动或返回后再继续)

或者,如果在没有超时的情况下调用
somefunc()
,它将运行somefunc,但等待它完成后再继续


将setTimeout视为“启动”一个新线程。

关于超时或间隔的事情,他们总是在执行自己的函数之前等待当前线程用完,即使您将其放在第一行

var color='white';
setTimeout(function(){alert(color+' from timeout')}, 0);
for(var i=0;i<100001;++i){
    if(i=100000)alert(color='green');
}
alert(color='red')
var color='white';
setTimeout(函数(){alert(color+'from timeout')},0);

对于(var i=0;i关于超时或间隔的事情,他们总是在执行自己的函数之前等待当前线程用完,即使你把它放在第一行

var color='white';
setTimeout(function(){alert(color+' from timeout')}, 0);
for(var i=0;i<100001;++i){
    if(i=100000)alert(color='green');
}
alert(color='red')
var color='white';
setTimeout(函数(){alert(color+'from timeout')},0);

对于(var i=0;i我记得在使用
setTimeout(func,0)
时出现了一些浏览器问题,所以现在每当我想要最短的延迟时,我都会执行
setTimeout(func,1)
。请注意,对于大多数(所有?)浏览器来说,真正最短的延迟是一些数字
n>1
(确切地说是
n>0
,可能是
n<50


我不记得哪个浏览器有问题。

我记得在使用
setTimeout(func,0)
时出现了一些浏览器问题,所以现在只要我想有最短的延迟,我就做
setTimeout(func,1)
。请注意,对于大多数(所有?)浏览器来说,真正最短的延迟是一些数字
n>1
(确切地说是
n>0
,可能是
n<50

我不记得哪个浏览器有问题。

注意setTimeout(fn,0)不一定确保函数fn将在当前调用堆栈展开后立即调用-可能不是一个非常重要的区别

浏览器可能在您的代码命中之前在事件上放置了内容 setTimeout(fn,0)[可能setTimeout之前的代码涉及一些CPU密集型计算]

有关setTimeout的用法,而不是常见的“让dom元素先渲染”,请参见

注意setTimeout(fn,0)不一定确保函数fn将在当前调用堆栈展开后立即调用-这可能不是一个非常重要的区别

浏览器可能在您的代码命中之前在事件上放置了内容 setTimeout(fn,0)[可能setTimeout之前的代码涉及一些CPU密集型计算]


有关setTimeout(而非常见的“让dom元素先渲染”)的用法,请参见

用于什么目的?两者都有原因!您介意告诉我原因吗?我正在使用somefunc做什么:我有几个帧(1~6),我使用designmode=“on”使这些帧可编辑。然后我设置内容(从数据库中)在这些帧中。但不幸的是,内容并不总是加载。出于什么目的?两者都有原因!您介意告诉我原因吗?我用somefunc做什么:我有几个帧(1~6),我使用designmode=“on”使这些帧可编辑。然后我设置内容(从数据库)在这些帧中。但不幸的是,内容并不总是加载。如果我使用setTimeout(somefunc,n),则不使用somefunc(),而是执行somefunc。无论我是否输入延迟“0”或任何其他值,它都会执行。@Hoque,第二个参数仅确定“新线程”在触发somefunc()之前等待的时间。如果您不需要一个新线程…只要调用somefunc()true,它是单线程的…这就是为什么“新线程”在引号中。setTimeout和setInterval基本上允许您同时运行2位或更多的代码。如果是单线程,那么旧线程会怎么样?