2017-08-15 21 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