2015-02-10 50 views
1

我创建了一个循环来模拟长时间运行的操作。这里是:SetTimeout从不调用函数

var b1, b2; 
b1 = true; 
b2 = false; 
while (b1) { 
    if (!b2) { 
     setTimeout(function() => { 
      b1 = false; 
     }, 1000); 
     b2 = true; 
    } 
} 

为什么b1 = true;从未发生过任何想法?

+0

你需要“收益”。 – akonsu 2015-02-10 18:53:25

+0

'=>'不是Javascript中的运算符? – Slime 2015-02-10 18:55:27

+0

假设你的环境将支持ES6,你的脚本仍然会产生一个永无止境的循环,因为在while循环结束之前不会调用超时回调。 – 2015-02-10 18:57:03

回答

5

setTimeout只安排n秒后要执行的功能。该函数放置在线程执行堆栈上,其方式与其他时间段相同。

在这种情况下,超时功能将不会中断执行您的while循环。它会在主线程执行完成后执行....所以永远不会。

您可以查看计时器here的HTML5草稿规范。

0

您的setTimeout的语法不正确

var b1, b2; 
b1 = true; 
b2 = false; 
while (b1) { 
    if (!b2) { 
     setTimeout(function() { 
      b1 = false; 
     }, 1000); 
     b2 = true; 
    } 
} 
+0

语法正确。这是一个新的JS语法。 – 2015-02-10 18:54:14

+0

这是不正确的。 – akonsu 2015-02-10 18:54:55

+0

来自控制台:未捕获的SyntaxError:意外的令牌) – indubitablee 2015-02-10 18:55:21