2017-08-15 83 views
1

我有兩個函數,例如runlider()和runslider1()。 runslider()在文檔加載後運行,我需要在完成runslider()後調用runslider1()。然後在runslider1()之後再次運行runlider()。這個過程應該像無限循環一樣發生。有人能幫助我嗎。 我試圖讓他們像回調。但那並不奏效。調用兩個javascript函數互相調用

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

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

如果這樣做,將導致堆棧溢出 – litelite

+1

只需創建一個調用這兩個函數的無限循環。 –

+0

請記住,JavaScript不允許多線程執行。所以這會掛起瀏覽器。然而,正如所說的,'setInterval'將會做到這一點。 – Mouser

回答

1

,如果你希望你的函數被調用一遍又一遍嘗試使用setInterval

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

這將導致這兩個功能的順序反覆每100ms被調用。看起來這是你正在尋找的行爲。

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

這是從另一個調用一個功能的方式。如果您創建無限循環,則會凍結瀏覽器。如果你想讓這兩個函數不斷運行,最好用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