为什么setTimeout不在javascript中执行

时间:2011-02-25 02:50:43

标签: javascript settimeout

我有一个函数可以在下面的javascript中睡觉:

var is_sleep = true;
function sleep(time){
  if (is_sleep){
    is_sleep = false;
    setTimeout("sleep(time)", time);
  }else{
    is_sleep = true;
  }
}
sleep(3000);

然而,它运行is_sleep = true的语句,不会运行is_sleep = false语句而不再睡眠。

有人能说出原因是什么吗?提前谢谢。

2 个答案:

答案 0 :(得分:6)

可能正在调用setTimeout,但传递给它的字符串失败,因为范围将不再包含您引用的time。尝试用以下代码替换该行:

setTimeout(function() { sleep(time); }, time);

...定义了一个闭包,它使用了正确的范围。你也可以试试这个:

setTimeout(sleep, time, time);

...将time作为参数传递给sleep

答案 1 :(得分:2)

setTimeout运行asynchronously,这意味着它不会阻止您的代码执行。也许你知道这一点,但是这个功能永远不会符合你为它选择的名称。

首先调用sleep(3000);调用sleep函数,调用is_sleep变量false,设置定时器,然后立即返回代码执行(sleep(3000);之后的任何内容; ))

如果setTimeout被正确调用(setTimeout(sleep,time,time);),则在3秒后,该函数将再次被称为将is_sleep设置回true