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
打印check
variables,并将其保留设置为var check = modelArray[z];
的最后一个值var check = modelArray[z];