Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何捕获私有变量_Javascript_Node.js_Closures - Fatal编程技术网

Javascript 如何捕获私有变量

Javascript 如何捕获私有变量,javascript,node.js,closures,Javascript,Node.js,Closures,在运行此代码时(在nodejs中),“Count”对于较大的“Count”值运行负值。 谁是罪魁祸首,“伯爵”还是“锁链”? 编写'flood'函数的正确方法是什么,以便它在setTimeout()之后安排下一次调用 flood=函数(计数){ 链=函数(){ --计数; console.log(“计数”+计数) 如果(计数>0){ 设置超时(链,1); } }; 链(); } runit=函数(计数,par){ 控制台日志(“rUn:”+计数+”,“+PAR”) 对于(var i=0;i<PA

在运行此代码时(在nodejs中),“Count”对于较大的“Count”值运行负值。 谁是罪魁祸首,“伯爵”还是“锁链”? 编写'flood'函数的正确方法是什么,以便它在setTimeout()之后安排下一次调用

flood=函数(计数){
链=函数(){
--计数;
console.log(“计数”+计数)
如果(计数>0){
设置超时(链,1);
}
};
链();
}
runit=函数(计数,par){
控制台日志(“rUn:”+计数+”,“+PAR”)
对于(var i=0;i<PAR;i++){
洪水(计数)
}
}
runit(3,4)
塔克斯

更新:
如果我调用chain()而不是setTimeout(chain,1),则计数永远不会为负。

chain
是一个全局值,因为您没有使用var关键字。这使得您的代码的行为与之类似,因为
runit(3,4)

4次:

flood(2); // Prints "Count 2" and calls setTimeout
然后发生第一轮异步回调。在该轮中,链被传递,而它引用了正确的函数,因此您将使用正确的链进行另一轮,并打印“Count 1”四次,但在这轮中,当您调用
setTimout
时,您将从最近的flood调用传递链,因此现在您有4个异步调用该单链,您将得到:

"Count 0"
"Count -1"
"Count -2"
"Count -3"
使用
var
声明它,您的问题将得到解决:

var chain = function() { ...

chain
是一个全局变量,因为您没有使用var关键字。这使得您的代码的行为与之类似,因为
runit(3,4)

4次:

flood(2); // Prints "Count 2" and calls setTimeout
然后发生第一轮异步回调。在该轮中,链被传递,而它引用了正确的函数,因此您将使用正确的链进行另一轮,并打印“Count 1”四次,但在这轮中,当您调用
setTimout
时,您将从最近的flood调用传递链,因此现在您有4个异步调用该单链,您将得到:

"Count 0"
"Count -1"
"Count -2"
"Count -3"
使用
var
声明它,您的问题将得到解决:

var chain = function() { ...

哎哟被喝咖啡的习惯所苦。。太多了.哎哟。。被喝咖啡的习惯所苦。。很多。