我有一个函数可以在下面的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语句而不再睡眠。
有人能说出原因是什么吗?提前谢谢。
答案 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
。