Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.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 for循环中的闭包_Javascript_For Loop_Closures - Fatal编程技术网

Javascript for循环中的闭包

Javascript for循环中的闭包,javascript,for-loop,closures,Javascript,For Loop,Closures,我不明白为什么这不起作用: function returnVerse(x){ return function(x) {console.log(x);}; } for(var x = 9; x>=0; x--){ return returnVerse(x)(); } 结果是我没有定义 我从中得到了启发: 我知道这是一个范围问题,所以我试图创建一个闭包,我没有得到什么 提前谢谢 您要返回的最后一个函数是您要调用的最后一个函数,它是用()调用的,这意味着没有参数,但是您已经在内

我不明白为什么这不起作用:

function returnVerse(x){
   return function(x) {console.log(x);};
}

for(var x = 9; x>=0; x--){
   return returnVerse(x)();
}
结果是我没有定义

我从中得到了启发:

我知道这是一个范围问题,所以我试图创建一个闭包,我没有得到什么


提前谢谢

您要返回的最后一个函数是您要调用的最后一个函数,它是用
()
调用的,这意味着没有参数,但是您已经在内部函数中指定了一个参数,并且它是
未定义的

function returnVerse(x){
                 //  ^ outer argument

   return function(x) { 
                // ^ inner argument overwrites outer argument

       console.log(x); // undefined
   };

}

for(var x = 9; x>=0; x--){
   return returnVerse(x)();
                //    ↑  ^ innner argument not passed, "undefined"
                      outer argument   
}
只是不要在内部函数中指定参数,外部函数的参数将在作用域中,并封闭(闭包)


另外,从
for
循环返回没有什么意义,这意味着它只运行一次您返回的最后一个函数是您调用的最后一个函数,它只使用
()
调用,这意味着没有参数,但是您在内部函数中指定了一个参数,并且它是
未定义的

function returnVerse(x){
                 //  ^ outer argument

   return function(x) { 
                // ^ inner argument overwrites outer argument

       console.log(x); // undefined
   };

}

for(var x = 9; x>=0; x--){
   return returnVerse(x)();
                //    ↑  ^ innner argument not passed, "undefined"
                      outer argument   
}
只是不要在内部函数中指定参数,外部函数的参数将在作用域中,并封闭(闭包)


另外,从
for
循环返回没有什么意义,这意味着它在您显示的上下文中只运行一次

,您不能在for循环
returnVerse(x)(x)中返回您的第二个函数需要,但未发送参数。在您显示的上下文中,您不能在for循环内返回
returnVerse(x)(x)第二个函数需要,但未发送参数。