如何捕捉私有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() { ...