如何捕捉私有variables

在运行这个代码(在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) 

感谢名单

更新:如果我调用chain()而不是setTimeout(chain,1),Count永远不会消极。

chain是一个全局的,因为你没有使用var关键字。 这使得你的代码的行为就像这样, runit(3, 4)

4次:

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

然后第一轮asynchronouscallback发生。 在那个循环链中,当它提到正确的function时,所以你会有另外一轮使用正确的链,并打印“计数1”四次,但在这一轮,当你调用setTimout你从最近的通话洪水,所以现在你有4个asynchronous调用单链,你会得到:

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

var声明它,你的问题将被解决:

 var chain = function() { ...