2011-07-15 15 views
-1
var DynamicModelView = {   
    createModelView: function (obj,vitalslength,headerValue) {  
     for(vitalsCount = 0, vitalsLen = vitalslength; vitalsCount < vitalsLen; vitalsCount++) { 
       // Business logic... with obj and headerValue 

     }  

     I need to call this function again.  
     When i call `this.createModelView(arguements)` it keeps on executing... 
    }    
} 

カウントに基づいて関数を実行する必要があります... forループはカウントに基づいて完全に実行されますが、関数は1回だけ実行されます。JavaScriptの再帰関数

+0

あなたの説明は少し曖昧です...どのようにその関数を呼び出しますか?実行し続けるのはどういう意味ですか?再帰の意味は、条件がアクティブである間に関数が実行を継続することです。あなたの退室はどうですか?その関数を呼び出すと、「引数」は何を意味しますか?同じ引数を渡し続けると、関数は実行を継続します。 –

+0

内部から呼び出す場合は、再帰を停止する条件が必要です。さもなければ、それは無限に自身を呼び出します。 – RobG

+0

"obj"パラメータとは何ですか? ...しかし、主に、あなたは 'this'を使う方法を知っていますか?機能的にプログラムするには、 'DynamicModelView.createModelView(...)'を呼び出します。 –

答えて

1

再帰的なループを処理するためのいくつかの方法は、(誰がここにSICPを覚えている?ああ...スキームを祝福)があります。

createModelView: function (obj,vitalslength,headerValue) {  
    for(vitalsCount = 0, vitalsLen = vitalslength; 
      vitalsCount < vitalsLen; vitalsCount++) { 
      // Business logic... with obj and headerValue 

    }  

    // the following will force this method to keep going with the same parameters 
    // unless you put a conditional return statement before it 
    // I always use an interim variable so JS can't get confused. 
    var args = arguments; 
    // are you sure it's this here and not DynamicModelView.createModelView 
    this.createModelView.apply(this, args) 
} 

より現実的(かつ迅速)、あなたは単に関数内でwhileループを配置することがありますが、機能はだけにして、あなたをx回を実行することを確認するには

createModelView: function (obj,vitalslength,headerValue) {  
    do { 
     for(vitalsCount = 0, vitalsLen = vitalslength; 
      vitalsCount < vitalsLen; vitalsCount++) { 
      // Business logic... with obj and headerValue 

     }  
    } while(/* condition which needs to be met to finish loop*/); 
} 

これを行うことができます:

// notice the last parameter? 
createModelView: function (obj,vitalslength,headerValue, x) { 
    for(var i = 0; i < x; i++) 
    { 
     for(vitalsCount = 0, vitalsLen = vitalslength; 
      vitalsCount < vitalsLen; vitalsCount++) { 
      // Business logic... with obj and headerValue 

     }  
    } 
} 

うまくいけばうまく始めることができます。

2

機能には動作中の終了ステートメントがありません。再帰を停止する条件で関数を開始します。

var DynamicModelView = {   
    createModelView: function (obj,vitalslength,headerValue) {  

     ***if (<stop condition>) return;*** 

     for(vitalsCount = 0, vitalsLen = vitalslength; vitalsCount < vitalsLen; vitalsCount++) { 
       // Business logic... with obj and headerValue 

     }  

     I need to call this function again.  
     When i call `this.createModelView(arguements)` it keeps on executing... 
    }    
} 
+0

私は、OPが再帰的に関数をなぜ呼び出すのかを知っていることに深刻な疑念を持っています。それだけで私のために追加されません。だから無限の再帰を止める方法を伝えることは一つのことですが、再帰は彼が必要とするものでさえないということはかなり肯定的です。 – Tomalak