1

I was trying to print first array element using recursive function but output is not as expected.

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

Expected output:

1
1
2
2
3
3

Obtained output:

3
3
3
3
3
3
Sнаđошƒаӽ
  • 16,753
  • 12
  • 73
  • 90

2 Answers2

1

The problem you are having is that recursive have deferred the call to your call back function (likely due to some async functionality inside the recursive), and the value of check has changed when the callback function is finally executed.

You need to bind the check in a closure, for which there are several options and coding style on how to do, but example like

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);
           });
        })();
    }
}
Soren
  • 14,402
  • 4
  • 41
  • 67
0

Try with something like:

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

You print the check variable in the refurbCallback and that remains set to the last value of var check = modelArray[z];

Tudor Constantin
  • 26,330
  • 7
  • 49
  • 72
  • I'm sure that the OP had something more elaborate in mind for the functionality of `recursive` – Soren May 05 '16 at 13:55