在运行此代码(在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
然后发生第一轮异步回调。在该回合链中,传递的是正确的函数,因此您将使用正确的链进行另一回合,并打印“ Count 1”四次,但是在此回合中,当您调用
setTimout
时,您将从最上方传递该链最近的泛洪调用,因此,您现在有4个异步调用,该单个Single Chain会得到:"Count 0"
"Count -1"
"Count -2"
"Count -3"
使用
var
声明它,您的问题将得到解决:var chain = function() { ...
关于javascript - 如何捕获私有(private)变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17706121/