2016-05-05 16 views
1

再帰関数を使用して最初の配列要素を出力しようとしましたが、出力が期待どおりではありません。forループ内の再帰関数が期待通りに機能しない

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

is'recursive'機能のようないくつかのオプションがありますそのため、閉鎖にcheckをバインドする必要があり、実行する方法にコーディングスタイルが、たとえば? – gurvinder372

答えて

1

の最後の値に設定されたままコールバック関数が最後に実行されたときに変更されました。

あなたは

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); 
      }); 
     })(); 
    } 
} 
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変数を印刷0とそれはあなたが持っている問題は recursiveがあなたのコールバック関数(原因 recursive内のいくつかの非同期機能への可能性)への呼び出しを延期している、と checkの値は持っているということです var check = modelArray[z];

+0

私は、OPが「再帰的」の機能性についてもっと精巧なものを持っていたと確信しています – Soren

関連する問題