2012-12-14 88 views
1

我在想,如果下面的代碼可以引入競爭條件:的setTimeout環路

rows.each(function() { 

     var current = this; 
     var doOperation = function() { 
      current.someMethod();  
      // do some operation using current 
     }; 

     setTimeout(doOperation, 1); 
    }); 

在setTimeout的延遲,是有可能的是,瀏覽器將開始執行循環的下一個itteration,改變「電流」 ,這樣doOperation不會使用被賦值的值來使用嗎?

+2

1毫秒是很少的時間 – mplungjan

+0

我這樣做是爲了防止IE 8.0停止長時間運行的腳本消息。由於整個循環需要一些時間來完成 – TGH

+0

您可以使用零而不是一個。 –

回答

4

那裏沒有危險,因爲每個迭代的doOperation將關閉一個新的局部變量current,而不會干擾以前的局部變量。

+0

是的,這很有意義。 「每個」的每次迭代在其自己的閉包中執行 – TGH

3

一切似乎都是爲了這裏。 setTimeout正在關閉each函數,因此它的doOperation對於每一行都會有所不同。

+0

是的,這很有意義。 「每個」的每次迭代都在其自己的閉包中執行 – TGH