recursion函数内循环不按预期工作

我试图使用recursion函数打印第一个数组元素,但输出不符合预期。

var modelArray = [1,2,3]; var refurbArray = [a,b]; for (var z = 0; z < modelArray.length; z++) { for (var y = 0; y < refurbArray.length; y++) { var check = modelArray[z]; var recursive(refurbArray[y], function() { consol.log(check); }); } } 

预期产出:

 1 1 2 2 3 3 

获得输出:

 3 3 3 3 3 3 

你遇到的问题是, recursive已经推迟了对你的callback函数的调用(可能是由于recursive内部的一些asynchronousfunction),并且在最后执行callback函数时, check的值已经改变了。

你需要在一个闭包中绑定check ,对于这个方法有几个选项和编码风格,但是如何做

 for (var z = 0; z < modelArray.length; z++) { for (var y = 0; y < refurbArray.length; y++) { (function() { var check = modelArray[z]; recursive(refurbArray[y], function() { consol.log(check); }); })(); } } 

试试像这样的东西:

 var modelArray = [1,2,3]; var refurbArray = ['a','b']; function recursive(val, cb){ cb(); } for (var z = 0; z < modelArray.length; z++) { for (var y = 0; y < refurbArray.length; y++) { var check = modelArray[z]; recursive(refurbArray[y], function() { console.log(check); }); } } 

refurbCallback打印checkvariables,并将其保留设置为var check = modelArray[z];的最后一个值var check = modelArray[z];