Javascript 如何使用参数调用方法本身,而不发生堆栈溢出

Javascript 如何使用参数调用方法本身,而不发生堆栈溢出,javascript,stack,stack-overflow,method-chaining,gsap,Javascript,Stack,Stack Overflow,Method Chaining,Gsap,由于函数调用自身,下面的GSAP代码无法工作,因此会无限循环并填满堆栈 var electrons = document.querySelectorAll('.electron'), paths = document.querySelectorAll('.path'), startDuration = 2; for(var i = 0; i < electrons.length; i++) { var myDelay = -(i * 0.5); orbit(el

由于函数调用自身,下面的GSAP代码无法工作,因此会无限循环并填满堆栈

var electrons = document.querySelectorAll('.electron'),
    paths = document.querySelectorAll('.path'),
    startDuration = 2;
for(var i = 0; i < electrons.length; i++) {
  var myDelay = -(i * 0.5);  
  orbit(electrons[i], paths[i], myDelay);  
}
function orbit(electron, path, delay) {
  TweenLite.to(electron, startDuration, {rotationY:'-360', ease:Linear.easeNone, 
               onComplete: orbit(electron, path, delay)}, delay);
  TweenLite.to(path, startDuration, {rotationZ:'360', ease:Linear.easeNone}, 
               delay);
}
var electrons=document.querySelectorAll('.electron'),
路径=document.querySelectorAll('.path'),
起始持续时间=2;
对于(var i=0;i
为什么在动画完成之前将
onComplete
函数放入堆栈中?

如果我从
onComplete
orbit函数调用中删除参数,它将进入该方法,但会给我一个错误,因为没有给出任何参数

我试着通过一个单独的函数来运行它,例如
函数在(1,2,3){orbit(1,2,3);}
之间,但是这个方法不起作用(正如我所期望的那样)

我之所以需要这样做,是因为如果我把所有的电子放在同一个
TweenLite
上,它们会等待其他电子完成。因为我有消极的延迟,这对我来说是不可接受的

如果你愿意,可以和你一起玩


你对如何解决这个问题有什么想法吗?

如果希望
onComplete
成为一个函数,请尝试以下方法:

TweenLite.to(electron, startDuration, {
        rotationY:'-360',
        ease:Linear.easeNone, 
        onComplete: function(){
            orbit(electron, path, delay);
        }
    },delay);

没有任何错误,但没有循环。有什么想法吗?@Zachsauier:在
轨道(电子、路径、延迟)前发出警报检查是否被调用。它确实被调用。事实上,它每两秒钟重复一次。那一定是我的函数有问题,我需要重置它,我需要的
onComplete
函数是
onComplete:function(){elem.restart();}
。谢谢你的帮助!为什么要使用负延迟?看起来你应该把它设为1。@JamesBlack负延迟是为了抵消电子,使它看起来不那么同步