【问题标题】:Javascript flow control with setTimeOut带有 setTimeOut 的 Javascript 流控制
【发布时间】:2012-12-03 15:13:37
【问题描述】:

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

  1. 为什么这不会在函数内部进行函数的无限递归?

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

    李>

完整页面位于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

【问题讨论】:

    标签: javascript controls settimeout flow


    【解决方案1】:

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

    setTimeout 回调运行时,之前的调用已经完成;它不在调用堆栈上。

    因此,您不会遇到堆栈溢出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-19
      • 2013-01-30
      • 2017-10-04
      • 2013-11-16
      • 2018-05-31
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      相关资源
      最近更新 更多