Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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 将值传递给nodejs中的回调_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript 将值传递给nodejs中的回调

Javascript 将值传递给nodejs中的回调,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,可能重复: (i=0;i

可能重复:

(i=0;i<100;i++)的
{
setTimeout(函数(){
控制台日志(i);
}, 500)
}
在上面的代码中,它将只打印100。我知道原因。但是如何将当前i值发送到
setTimeout
中的回调?

(i=0;i)的

对于(i=0;i这项工作:

for (var i = 0; i < 100; i++) {
    (function(i) {
        setTimeout(function() {
            console.log(i);
        }, 500);
    })(i);
}​
for(变量i=0;i<100;i++){
(职能(一){
setTimeout(函数(){
控制台日志(i);
}, 500);
})(i) );
}​
这项工作:

for (var i = 0; i < 100; i++) {
    (function(i) {
        setTimeout(function() {
            console.log(i);
        }, 500);
    })(i);
}​
for(变量i=0;i<100;i++){
(职能(一){
setTimeout(函数(){
控制台日志(i);
}, 500);
})(i) );
}​

在循环中使用匿名函数创建闭包:

for (i = 0; i < 100; i++) {

  (function(i){

    window.setTimeout(function() {
      console.log(i);
    }, 500)

  })(i);

}
(i=0;i<100;i++)的
{
(职能(一){
setTimeout(函数(){
控制台日志(i);
}, 500)
})(i) );
}

调用时将值传递给函数时,将复制该值,并且函数的每个实例都有自己的副本,该副本在循环计数器更改时不会更改。

在循环内使用匿名函数创建闭包:

for (i = 0; i < 100; i++) {

  (function(i){

    window.setTimeout(function() {
      console.log(i);
    }, 500)

  })(i);

}
for (i = 0; i < 100; i++) {
    setTimeout((function(i) {
        return function(){
            console.log(i);
        }
    })(i), 500)
}
(i=0;i<100;i++)的
{
(职能(一){
setTimeout(函数(){
控制台日志(i);
}, 500)
})(i) );
}
在调用时将值传递给函数时,将复制该值,并且函数的每个实例都有自己的副本,该副本在循环计数器更改时不会更改。

for(i=0;i<100;i++){
for (i = 0; i < 100; i++) {
    setTimeout((function(i) {
        return function(){
            console.log(i);
        }
    })(i), 500)
}
setTimeout((函数(i){ 返回函数(){ 控制台日志(i); } })(i) ,500) }
用于(i=0;i<100;i++){
setTimeout((函数(i){
返回函数(){
控制台日志(i);
}
})(i) ,500)
}

bt如果它是某个其他回调(setTimeout就是一个例子)。任何默认情况下已经有一些参数的通用回调。如果不能这样做,请使用旧的闭包解决方案(请参阅所有其他答案)@Guffa这是node.js,而不是IESince
setTimeout
不是ES的一部分,node.js与Mozilla没有任何关系,最好链接到node.js文档:。@dystroy:Right.sleed my member.bt如果是其他回调怎么办。(setTimeout就是一个例子)。默认情况下已具有某些参数的任何通用回调。如果无法执行此操作,请使用旧的闭包解决方案(请参阅所有其他答案)@Guffa这是node.js,不是因为setTimeout不是ES的一部分,node.js与Mozilla无关,最好链接到node.js文档:。@dystroy:对。我忘了。Nit:OP使用的原始回调(
函数(){console.log(i);}
)已经是一个闭包了。你基本上是说“使用闭包而不是闭包"。重要的一点是,您正在立即执行该函数,从而创建一个新的作用域。@FelixKling:该捕获捕获捕获循环变量而不是复制它,因此您需要另一个闭包,而不是闭包而不是闭包。好的,您不是这样说的,但对我来说,它听起来像这样。但不,从技术上讲,您不需要另一个闭包,您需要一个新的作用域(在JS中是函数调用)来捕获变量的当前值。正如我所说,这都是吹毛求疵,但仅将立即执行的函数称为“闭包”是不正确的。这不是该构造的主要特征,创建一个新的作用域是。如果JavaScript对闭包使用不同的语法(与PHP一样,与“普通”函数不同的是,区别更加明显。Nit:OP使用的原始回调(
function(){console.log(i);}
)已经是一个闭包了。您基本上是说“使用闭包而不是闭包”。重要的一点是,您正在立即执行该函数,从而创建一个新的作用域。@FelixKling:该捕获捕获捕获循环变量而不是复制它,因此您需要另一个闭包,而不是闭包而不是闭包。好的,您不是这样说的,但对我来说,它听起来像这样。但不,从技术上讲,您不需要另一个闭包,您需要一个新的作用域(在JS中是函数调用)来捕获变量的当前值。正如我所说,这都是吹毛求疵,但仅将立即执行的函数称为“闭包”是不正确的。这不是该构造的主要特征,创建一个新的作用域是。如果JavaScript对闭包使用不同的语法(与PHP一样,与“普通”函数不同的是,两者之间的区别将更加明显。