2017-08-15 8 views
1

私は、例えば、runslider()とrunslider1()の2つの関数を持っています。 ドキュメントがロードされた後にrunslider()が実行され、runslider()の終了後にrunslider1()を呼び出す必要があります。その後、runslider1()の後に再度runslider()を実行します。このプロセスは、無限ループのように起こるはずです。誰かが私を助けてくれますか? 私はそれらをコールバックのように保つようにしました。しかし、それはうまくいかなかった。2つのjavascript関数を互いに呼び出す

function runSlider(runslider1){ 
     alert("run") 
     runSlider1(runSlider()); 
    } 

    function runSlider1(runslider){ 
     alert("run1"); 
     runSlider(runSlider1()); 
    } 
+9

これを行うと、スタックオーバーフローが発生します – litelite

+1

これらの2つの関数を呼び出す無限ループを作成するだけです。 –

+0

JavaScriptはマルチスレッド実行を許可しないことに注意してください。これにより、ブラウザがハングアップします。しかし、 'setInterval'はそのトリックを行います。 – Mouser

答えて

1

あなたの関数がオーバーと呼ばれるようにしたいと何度もこれが100ms毎に両方の機能が繰り返しその順序で呼び出されることになりますsetInterval

function runSlider(){ 
 
    alert("run"); 
 
    runSlider1(); 
 
} 
 
function runSlider1(){ 
 
    alert("run1"); 
 
} 
 
setInterval(runSlider, 100);

を使用してみます。これはあなたが探している行動のようです。

0

上記のコメントは正しいです - スタックオーバーフローが発生します。あなたがこれを必要とする理由

は分からないのですが、私はあなたのためにコードをきれいに:

function runSlider() { 
    alert('run'); 
    runSlider1(); 
} 

function runSlider1() { 
    alert('run1'); 
    runSlider(); 
} 
0

あなたはただ一つの関数を呼び出す必要があり、このような無限ループを作成することができます。

var runSlider = function() { 
 
    console.log("run") 
 
    runSlider1() 
 
} 
 

 
var runSlider1 = function() { 
 
    console.log("run1"); 
 

 
    setTimeout(function() { 
 
    runSlider() 
 
    }, 1000) 
 
} 
 

 
runSlider()

0

別の解決策は、次のとおりです。

function runSlider() { 
    console.log("run"); 
    runSlider1(); 
    setTimeout(runSlider1(), 1000) // Calls runSlider1() after 1 second(1000 millisecond). You can change it. 
} 

function runSlider1() { 
    console.log("run1"); 
    setTimeout(runSlider(), 1000) // Calls runSlider1() after 1 second(1000 millisecond). 
} 

runSlider(); // Starts the cycle 
0
var maxCalls = 0; 

function run1(cb) { 
    alert('run1'); 
    if (maxCalls++ < 5) { //Added this to avoid an infinite loop 
    cb(run1); //We want the function run after cb to be this one 
    } 
} 

function run2(cb) { 
    alert('run2'); 
    if (maxCalls++ < 5) { 
    cb(run2); 
    } 
} 

これは別の一つの機能を呼び出すための方法です。無限ループを作成すると、ブラウザがフリーズします。 2つの関数を絶え間なく動作させたい場合は、代わりにsetInterval呼び出しを使って少しだけ実行を解放することをお勧めします。

var runFunc = 0; 

var run1 = function() { 
    alert('run1'); 
}; 

var run2 = function() { 
    alert('run2'); 
}; 

var run = function() { 
    !(++runFunc) ? run2 : run1; //Alternate between calling each function 
} 

var stopRunning = function() { //Call this to stop the functions running 
    clearInterval(runInterval); 
}; 

var runInterval = setInterval(run, 1000); //Calls the function every second 
関連する問題