注:回答を更新しました。投稿の下部を参照してください。
よし、見てみよう。
メソッドを使用しているwindow[func]()
ので、各関数からの戻り値を保存して使用できるはずです。
証明:
function a(){
return "value";
}
var ret_val = window['a']();
alert(ret_val);
return ルールを作成しましょう:
関数が を返す場合true
、実行フローを続行します。
関数が を返す場合false
、実行フローを中断します。
function a(){
//Do stuff
return (condition);
}
for(i = 0; i < n; i++){
var bReturn = window['function']();
if(!bReturn) break;
}
それでは実践してみましょう。
function a(){
//Do stuff
return ((new Date()).getSeconds() % 2); //Continue?
}
function b(){
//Do stuff
return true; //Continue?
}
function c(){
//Do stuff
return false; //Continue?
}
function d(){
//Do stuff
return true; //Continue?
}
var functions = new Array('a', 'b', 'c', 'd');
for (var i = 0; i < functions.length; i++ ) {
var bReturn = window[functions[i]]();
if(!bReturn) break;
}
スクリプトをいつ実行するかに応じて、たとえば偶数または不均一な期間に応じて、関数のみを実行するa
か、関数a
b
&を実行しますc
。各機能の合間に、通常の業務に取り掛かることができます。
もちろん、条件はおそらく個々の関数ごとに異なります。
これが実際に動作しているJSFiddle の例を次に示します。
a
たとえば、関数が false を返す場合、次の関数をスキップして次の関数、またはその次の関数に進むように、小さな変更を加えることができます。
変化
for (var i = 0; i < functions.length; i++ ) {
var bReturn = window[functions[i]]();
if(!bReturn) break;
}
これに
for (var i = 0; i < functions.length; i++ ) {
var bReturn = window[functions[i]]();
if(!bReturn) i++;
}
関数が false を返すたびに、1 つの関数をスキップします。
ここで試すことができます。
余談ですが、スクリプトを「一時停止」する待機関数を探している場合は、このコードを使用できます。
function pausecomp(millis){
var date = new Date();
var curDate = null;
do {
curDate = new Date();
}while(curDate-date < millis);
}
アップデート
コードを調整した後、 で動作するようになりましたsetTimeout
。
アイデアは、配列内の最初の関数から始まるエントリ ポイントがあり、配列内の現在の場所のインデックス パラメーターを渡し、インデックスを 1 増やして次の関数を実行するというものです。
例| コード
function next_function(index){
if(index >= functions.length) return false;
setTimeout(function(){
window[functions[index+1]](index+1);
}, 1000);
}
function a(index){
//Do stuff
if(((new Date()).getSeconds() % 2)) return false; //Stop?
next_function(index);
}
function b(index){
//Do stuff
if(false) return false; //Stop?
next_function(index);
}
function c(index){
//Do stuff
if(true) return false; //Stop?
next_function(index);
}
function d(index){
//Do stuff
if(false) return false; //Stop?
next_function(index);
}
var functions = new Array('a', 'b', 'c', 'd');
//entry point
window[functions[0]](0);