我试图使用递归函数打印第一个数组元素,但输出不是预期的。
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
答案 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];
的最后一个值