我有一个脚本需要突破javascript执行队列。我发现我可以用几种方法做到这一点。
alert();//of course we can't use this one.
setTimeout(function(){
someScript();//works, but are there vulnerabilites?
}, 1);
还有哪些其他方法以及从javascript执行队列中删除的正确方法是什么?
如果setTimeout是最佳选择,使用setTimeout有哪些漏洞?是否存在未来的问题,超时中的代码无法调用,速度问题等等。
答案 0 :(得分:3)
setTimeout是中断执行流程的典型方式。 alert()不是同一个东西,它是同步的 - 它将停止你的代码,直到按下OK,并从它停止的地方继续。当你使用setTimeout时,它会释放线程以执行另一段代码。
唯一的漏洞是不知道你在做什么。编码异步比编码同步有点棘手。你必须看你的背景,因为使用“this”是行不通的:
object = {
firstMethod: function(){
setTimeout(function(){
this.secondMethod(); // won't work!
}, 30);
},
secondMethod: function(){}
}
答案 1 :(得分:1)
基本上你在谈论执行当前堆栈,换句话说是异步执行。 setTimeout()
是这种情况下的方法,setTimeout()
之后的代码将在回调函数之前执行。
1ms
中的{p> setTimeout()
从不起作用,但实际上是1ms
。根据我的经验,你通常可以获得的最快速度是10ms
。
答案 2 :(得分:1)
setTimeout是这样做的方法。请注意,第二个参数是毫秒而不是秒
的超时