function
sleep
(numberMillis) {
var now = new Date();
var exitTime = now
.
getTime() + numberMillis;
while (true) {
想要用setTimeout
实现
这么一个功能:每隔一秒输出一个数字。我们的代码
js
代码大概是这样的:
for
(var i = 0; i < 3; i++) {
setTimeout(function () {
console
.
log(i);
}, 1000);
运行这段代码会发现,程序在1秒后输出了3个3。(不但没有每隔一秒输出,而且输出的数字还全都是3)
原因分析:
这跟
js
的阻塞机制有关。
js
阻塞机制,跟
js
引擎的单线程处理方式有关,每个window一个
js
线程。所谓单
在写
js
时候,需要连续三次调用同一个接口,首先想到的就是在
for
循环
里面
循环
三次调用,但是速度过快,想要每隔1秒调用一次,但是没有Thread
.
sleep
,查找资料以后找到解决办法(原文讲的很清楚,这里直接复制过来,文末附链接):
Js
阻塞机制,跟
Js
引擎的单线程处理方式有关,每个window一个
JS
线程。所谓单线程,在某个特定的时刻只有特定的代码能够被执行,并阻塞其它的代码。
由于浏览器是事件驱动的(Event driven),因此浏览器中很多行为是异步(Asynchronized)的,很容易有事件被同时
function
sleep
(d){
console
.
log(Date
.
now());
for
(var t = Date
.
now();Date
.
now() - t <= d;) {
sleep
(9123); //时间以毫秒为单位
转自:http://www
.
cnblogs
.
com/yjf512/p/3469820
.
html
编写复杂的
JavaScript
脚本时,有时会有需求希望脚本能停滞指定的一段时间,类似于 java 中的 Thread
.
sleep
或者 sh 脚本中的
sleep
命令所
实现
的效果。
很多
语言
都有
sleep
函数,
sleep
() 方法的作用是在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行)但是
JavaScript
中并没有提供类似于 Java 的线程控制的功能, 虽然有 setTimeout 和 setInterval 两个方法可以做一些定时执行控制,但并不能满足所有的要求。
因为setTimeou