2013-07-17 67 views
1

在運行此代碼(在nodejs中)時,'Count'對大數值'count'運行爲負值。 誰是罪魁禍首,'數'還是'連鎖'? 寫入'flood'函數的正確方法是什麼,以便在setTimeout()之後調度下一次調用。如何捕獲私有變量

flood = function(count) {  
    chain = function() { 
     --count; 
     console.log("Count " + count) 
     if(count > 0) { 
      setTimeout(chain, 1); 
     } 
    }; 
    chain(); 
} 


runit = function (count,par) { 
    console.log("RUNIT: " + count + " , " + par) 
    for(var i = 0 ; i < par ; i ++) { 
     flood(count) 
    } 
} 

runit(3,4) 

感謝名單

更新: 如果我叫鏈()代替的setTimeout(鏈,1),伯爵永不變負。

+0

什麼是不工作? – iConnor

回答

1

chain是一個全局的,因爲你還沒有使用var關鍵字。這使得你的代碼行爲如此,runit(3, 4)

4次:

flood(2); // Prints "Count 2" and calls setTimeout 

接着發生的第一輪asynchonous回調。在那個圓鏈通過時,它提到了正確的功能,所以你將有另一輪使用正確的鏈並打印「計數1」四次,但在這一輪,當你撥打setTimout你從最近一次通話水災,所以現在你有4個異步調用單鏈,你會得到:

"Count 0" 
"Count -1" 
"Count -2" 
"Count -3" 

聲明它使用var,你的問題就解決了:

var chain = function() { ... 
+0

..被coffeescript習慣咬傷..感謝很多。 – vrdhn

+0

@Vardhan不客氣。 – Paulpro