如何同时运行两个单独的功能?如果我想要两个时钟,一个计数,另一个计数,我想让它们同时运行,我该怎么做?
如果我刚刚做了:
var up = 1;
while(true){
document.write(up);
up++;
if(up==11)
up=1;
}
var down = 10;
while(true){
document.write(down);
down--;
if(down==0)
down=10;
}
......它会继续数数......
答案 0 :(得分:9)
Javascript是单线程的。只有一个线程可以访问该页面。
在某些HTML5浏览器中可以使用Web Workers在另一个线程中执行某些代码,然后通过消息传递与主线程进行通信,但Web Worker线程无法以任何方式访问DOM。
如果您希望计数器在循环中运行,那么典型的方法是使用计时器,然后在每次计时器运行时设置DOM中对象的内容。通过这种方式,您可以看到同时运行多个事物,但实际上,它们仍然是一次一个,只是单独计时。
以下是“似乎”同时运行的两个计数器的示例:http://jsfiddle.net/jfriend00/3yc9r/。
这个代码就是这个(在页面加载后运行):
var cntr1 = 1;
var cntr2 = 2;
setInterval(function() {
document.getElementById("time1").innerHTML = cntr1 += 13;
}, 33);
setInterval(function() {
document.getElementById("time2").innerHTML = cntr2 += 5;
}, 44);
另外,你真的不想在循环中做document.write()
。将运行一段时间的代码应该在加载页面后运行,并且应该直接修改DOM中的对象,而不是使用document.write()
。
答案 1 :(得分:2)
您必须将两个计数器放在同一个循环中,但JavaScript本质上是单线程的,您的代码示例会冻结浏览器。尝试使用SetTimeout
或SetInterval
函数以特定间隔触发事件。 http://www.w3schools.com/js/js_timing.asp
答案 2 :(得分:2)
你没有。 Javascript是单线程的。如果你想要一个时钟,你会使用异步超时。
// Counts up and down by one per second.
var up = 1;
setTimeout(function() {
up++;
document.write(up);
}, 1000);
var down = 10;
setTimeout(function() {
down--;
document.write(down);
}, 1000);
JS一次只能做一件事(意味着在一个单线程运行循环中),但它非常支持将异步回调连接在一起。
答案 3 :(得分:1)
你不能,如果你在循环中写入身体,它会很慢。
而是使用setTimeout()来运行永久循环的下一次迭代。 https://developer.mozilla.org/en/window.setTimeout