for循环中的递归函数无法按预期工作

时间:2016-05-05 13:32:13

标签: javascript jquery node.js

我试图使用递归函数打印第一个数组元素,但输出不是预期的。

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

2 个答案:

答案 0 :(得分:1)

您遇到的问题是recursive将调用推迟到您的回调函数(可能是由于recursive中的某些异步功能),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);
           });
        })();
    }
}

答案 1 :(得分:0)

尝试使用以下内容:

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);
        });
    }
}

您在check中打印refurbCallback变量,并且仍然设置为var check = modelArray[z];的最后一个值