日期:2014-05-16  浏览次数:20349 次

如何控制多函数调用递归函数时不抢进程?
JScript code

function aaa() {

  document.getElementById("div1").style.left = document.getElementById("div1").style.left - 1
  if(document.getElementById("div1").style.left  >= 0){
    setTimeout("aaa()", 20);
  }




显然aaa()函数是用来移动一个div的

函数bbb()有权调用aaa()
函数ccc()有权调用aaa()
函数ddd()有权调用aaa()


如何做到让bbb()调用aaa()的时候 ccc()和ddd()无权调用? 等aaa()递归达到目的后 再放开权限?




因为现在3个按钮分别控制bbb()ccc()ddd()


所以 3个按钮同时按下的时候 aaa()函数就会以原来3倍的速度调用...影响了原来的div的缓慢移动效果


------解决方案--------------------
因为你本身有20ms的等待时间
现假设有A B C 三个方法在调用aaa()
那么A调用了aaa()
aaa()运行了之后休息20ms
B调用aaa()
在A的20ms里B是可以运行的
同理C也是
所以原本20ms内只运行一次的现在可以变为3次

至于说setTimeout其实是模拟多线程的,但是不影响这个结果的诞生。