2010-12-02 77 views
1

我有一個腳本,我需要碰到JavaScript執行隊列。我發現我可以用一些方法做到這一點。Javascript異步執行隊列和setTimeout?

alert();//of course we can't use this one. 

setTimeout(function(){ 
    someScript();//works, but are there vulnerabilites? 
}, 1); 

還有什麼其他的方法,以及什麼是正確的方式來衝出JavaScript執行隊列?

如果setTimeout是最好的選擇,那麼使用setTimeout有哪些漏洞?有沒有可能的未來問題,超時代碼不會被調用,速度問題的可能性等。

+0

不確定你碰到什麼意思。另外,在你說'在這裏使用jQuery'的評論中,那不是jQuery。這只是普通的JavaScript,不需要jquery。 – Matt 2010-12-02 21:38:19

+0

當你說「漏洞」是你要注意的事情? (變量範圍,上下文等) – zzzzBov 2010-12-02 21:40:08

回答

3

setTimeout是中斷執行流程的典型方法。 alert()不是同一件事,它是同步的 - 它會停止你的代碼,直到按下OK,並恢復它停止的地方。當你使用setTimeout時,釋放線程去執行另一段代碼。

唯一的漏洞不知道你在做什麼。編碼異步比編碼同步稍微複雜一些。而且你必須觀察你的情況,因爲使用「this」將不起作用:

object = { 
    firstMethod: function(){ 
     setTimeout(function(){ 
      this.secondMethod(); // won't work! 
     }, 30); 
    }, 
    secondMethod: function(){} 
} 
1

基本上你說的是執行當前堆棧,換句話說是異步執行。 setTimeout()是這種情況下的方法,setTimeout()之後的代碼將在回調函數之前執行。

1ms in setTimeout()永遠不會工作,但實際上是1ms的interms。根據我的經驗,通常可以獲得的最快速度約爲10毫秒。

1

setTimeout是實現它的方法。請注意,第二個參數是毫秒中的超時而不是秒