使用setTimeOut进行Javascript流控制

时间:2012-12-03 15:13:37

标签: javascript controls settimeout flow

这是“为什么这样做”而不是“为什么这不起作用?” movePic函数更新几个图像的坐标,并根据需要更改图像,然后调用setTimeOut(movePic,delay)。所以movePic函数在mnovePic函数中被称为WITHIN。

  1. 为什么这不能在函数内部无限递归函数?

  2. 如果#1的答案是当setTimeOut调用movePic时,它也会首先突破movePic,那么在setTimeOut之后实际移动的图像是如何执行的?

  3. 完整页面位于www.salemharvest.org。功能是:

    function movePic ()  {
    left1 += movement;
    left2 += movement;
    if (left1 > 500)  { //  photo1 disappears over right edge
      left1 = -510; // photo1 goes to  500 left of window
      left2=-510;  // photo2 goes to START of window 
      j=j+1;
      if (j > (p - 1)) j = 0;
      document.images.animated1.src = preLoad[j].src; // switches to photo
      }
    else if (left1==0)  { // photo1 fully in window
      left2 =-1010; // photo2 goes to 510 ABSOLUTE to left of window
      j=j+1;
      if (j > (p - 1)) j = 0; 
      document.images.animated2.src = preLoad[j].src; // switches the photo
      }
    setTimeout (movePic, delay);
    photo1.style.left = left1 + "px"; 
    photo2.style.left = left2 + "px"; 
    } // end of movePic function
    

1 个答案:

答案 0 :(得分:0)

setTimeout会安排稍后稍后调用的函数。它不影响,实际上与当前调用堆栈中执行的代码无关。

setTimeout回调运行时,前一个呼叫已经完成;它不在调用堆栈中。

因此,您不会出现堆栈溢出。