为什么setTimeout不在javascript中执行

ywe*_*nbo 0 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);
Run Code Online (Sandbox Code Playgroud)

但是它运行is_sleep = true的语句,不会运行is_sleep = false语句而不再睡眠.

有人能说出原因是什么吗?先感谢您.

ick*_*fay 6

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

setTimeout(function() { sleep(time); }, time);
Run Code Online (Sandbox Code Playgroud)

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

setTimeout(sleep, time, time);
Run Code Online (Sandbox Code Playgroud)

...将time作为参数通过sleep.