在运行此代码(在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/

10-13 04:22