我创建了一个循环来模拟长时间运行的操作。这里是:SetTimeout从不调用函数
var b1, b2;
b1 = true;
b2 = false;
while (b1) {
if (!b2) {
setTimeout(function() => {
b1 = false;
}, 1000);
b2 = true;
}
}
为什么b1 = true;
从未发生过任何想法?
我创建了一个循环来模拟长时间运行的操作。这里是:SetTimeout从不调用函数
var b1, b2;
b1 = true;
b2 = false;
while (b1) {
if (!b2) {
setTimeout(function() => {
b1 = false;
}, 1000);
b2 = true;
}
}
为什么b1 = true;
从未发生过任何想法?
setTimeout
只安排n
秒后要执行的功能。该函数放置在线程执行堆栈上,其方式与其他时间段相同。
在这种情况下,超时功能将不会中断执行您的while
循环。它会在主线程执行完成后执行....所以永远不会。
您可以查看计时器here的HTML5草稿规范。
您的setTimeout的语法不正确
var b1, b2;
b1 = true;
b2 = false;
while (b1) {
if (!b2) {
setTimeout(function() {
b1 = false;
}, 1000);
b2 = true;
}
}
语法正确。这是一个新的JS语法。 – 2015-02-10 18:54:14
这是不正确的。 – akonsu 2015-02-10 18:54:55
来自控制台:未捕获的SyntaxError:意外的令牌) – indubitablee 2015-02-10 18:55:21
你需要“收益”。 – akonsu 2015-02-10 18:53:25
'=>'不是Javascript中的运算符? – Slime 2015-02-10 18:55:27
假设你的环境将支持ES6,你的脚本仍然会产生一个永无止境的循环,因为在while循环结束之前不会调用超时回调。 – 2015-02-10 18:57:03