执行 window.setTimeout 哪个选项更好,为什么?
选项 A:
window.setTimeout(somefunc,0);
选项 B:
window.setTimeout(somefunc,n); //n may be any number >0
谢谢。
执行 window.setTimeout 哪个选项更好,为什么?
选项 A:
window.setTimeout(somefunc,0);
选项 B:
window.setTimeout(somefunc,n); //n may be any number >0
谢谢。
关于超时或间隔的事情,他们总是在执行自己的函数之前等待当前线程用完——即使你把它放在第一行。
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')
选项 A 将简单地调用不必要的调用(因为你的第二个参数意味着0 毫秒的延迟)somefunc
的额外开销。选项 B 用于如果您打算在执行之前有一个延迟。请您详细说明一下,或者这是否回答了您的问题?setTimeout
somefunc
这取决于你想做什么。
setTimeout(somefunc,0)
只是调用 somefunc 并没有太大不同
(但我想.setTimeout(somefunc,0)
会先完成当前块然后调用somefunc
)
如果您需要等待浏览器渲染,然后运行somefunc
,请使用window.onload
jQuery 或$(document).ready
window.setTimeout(somefunc,0);
将立即运行 somefunc (但在继续之前不会等待返回值)
window.setTimeout(somefunc,n);
将在运行 somefunc 之前等待 n 毫秒(但在继续之前不会等待它启动或返回)
或者,如果您在somefunc()
没有超时的情况下调用,它将运行 somefunc 但等待它完成后再继续。
考虑 setTimeout 就像“开始”一个新线程。
我记得在使用时遇到了一些浏览器问题,setTimeout (func, 0)
所以现在setTimeout (func, 1)
只要我想获得最短的延迟,我就会这样做。请注意,对于大多数(所有?)浏览器来说,真正的最短延迟是某个数字n > 1
(肯定n > 0
也可能n < 50
)。
我不记得哪个浏览器有问题。
注意 setTimeout(fn,0) 不一定确保函数 fn 在当前调用堆栈展开后立即被调用 - 可能不是一个非常重要的区别。
在您的代码命中setTimeout (fn, 0)之前,浏览器可能已经在事件上放置了一些东西[也许 setTimeout 之前的代码涉及一些 CPU 密集型计算]。在此处查看示例
function clickHandler () {
spinWait(1000);
setTimeout(relayFunc, 0);
//the jsFiddle link shows that relayFunc
//will not be called after the clickHandler
//if another event was queued during spinWait()
}
对于除了常见的“让 dom 元素先渲染”之外的 setTimeout 用法,请参阅我的博客here