setTimeout的时间设为0的问题

javascript是单线程执行的,当某一段代码正在执行的时候,所有的后续任务都必须等待,形成一个队列,

一旦当前任务执行完毕,再从队列中取出下一个任务。这常被称为”阻塞式执行“。

如果代码中设定一个setTimeout,那么浏览器就会在合适的时候,将代码插入到队列中,如果这个时间设为0,

就代表立即插入到队列中,但是不会立即执行,仍然会等待前面的代码执行完毕。所以setTimeout并不能保证

执行的时间,是否及时执行取决予Javascript线程是拥挤还是空闲。

例如,下面的代码输出为5,5,5,5,5

for(var i = 0;i<5;i++){
    setTimeout(function(){
        console.log(i);
    },0);
}

而下面的代码输出为0,1,2,3,4

for(var i=0;i<5;i++){
    (setTimeout(function(a){
        console.log(a);
    }(i),1000))
}
时间: 2024-08-05 22:26:59

setTimeout的时间设为0的问题的相关文章

c3p0配置 initialPoolSize 和minPoolSize 可以设为0吗?设0有坏处吗?

c3p0配置 initialPoolSize 和minPoolSize 可以设为0吗?设0有坏处吗? c3p0配置 initialPoolSize 和minPoolSize 可以设为0吗?设0有坏处吗? 2015-04-14 11:18提问者采纳 热心网友 <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</ve

北京时间28号0点以后Scott Hanselman同志台宣布dotnet core 1.0 rtm

今日占住微信号头条的好消息<终于来了!微软.Net Core 1.0下载放出>.本人立马跑到官网http://dot.net看了一下,仍然是.net core 1.0 Preview 1版本. 看来该文所提供的下载链接应该是提前泄露的版本了吧. 有网友说,Red Hat DevNation的第二天也就是美太平洋时间27号上午(北京时间28号0点以后) Scott Hanselman同志才会登台宣布dotnet core 1.0 rtm. 查了一下dotnet cli tools 进度,如下:

【转】 c#中两个DateTimePicker,一个时间设置为0:0:0,另一个设置为23:59:59

[转] c#中两个DateTimePicker,一个时间设置为0:0:0,另一个设置为23:59:59 stp1为第一个DateTimePicker this.dtp1.Value=this.dtp1.Value.Date; stp2为第二个DateTimePicker 设置dtp2的值的时间部分是23:59:59. this.dtp2.Value = new DateTime(this.dtp2.Value.Year, this.dtp2.Value.Month, this.dtp2.Valu

美股又双叒叕熔断了。   北京时间 19 日 0 时 56 分,标普 500 指数大跌7% 触

美股又双叒叕熔断了. 北京时间 19 日 0 时 56 分,标普 500 指数大跌7% 触发熔断机制,暂停交易 15 分钟,为本月来第四次.史上第五次熔断(第一次在 1997 年 10 月 27 日,第二.三.四次分别在本月 9 日.12 日.16 日). 道琼斯指数也跌破 20000 点关口,抹去过去三年涨幅:纳指则重挫 6.30%.而从 2 月 12 日道指最高点算起,道指仅花了 35 天.24 个交易日跌去了 1 万点.同时,加拿大多伦多S综合指数跌超7%,触发熔断. 原文地址:https

SQL Server最大内存设为0后的处置办法

故障说明: 远程调整实例内存时疏忽,将实例最大内存调整为了0,因此最大内存变成了128MB的最小值. 解决方式: 1.正常关闭SQL Server服务,如果是集群,需要先关停止集群角色防止故障转移,然后再单独关闭服务. --注意这一步可能会使实例处于挂起状态很长时间,但是正常关闭是必须的,直接杀进程可能造成数据文件损坏. 2.以"not as a service"的模式启动实例. cd D:\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\

获取时间并补0

<script type="text/javascript"> $(function(){ /*indexPage1*/ function Appendzero (obj) { if (obj < 10) return "0" + obj; else return obj; } function getWeek (weeknum) { if (weeknum == 0) week = "星期日"; if (weeknum ==

编写一个圆类Circle,该类拥有: ①一个成员变量 Radius(私有,浮点型); // 存放圆的半径; ②两个构造方法 Circle( ) // 将半径设为0 Circle(double r ) //创建Circle对象时将半径初始化为r

package Circle;import java.util.Scanner;public class Circle { private double Radius; public double getRadius() { return Radius; } public void setRadius(double r) { this.Radius=r; } public Circle()//无参构造方法 { this.Radius=0;//初始化为0 System.out.println("圆

Jquery每行最后一个LI边距设为0

下面用的是jquery方法,请加载jquery插件 <script type="text/javascript"> $(function(){ $('#newhouse li:nth-child(3n+2)').css('margin-right', '0px'); }) </script> 主要代码:nth-child(3n+2) 其中N表示倍数,2是偏移的位置数,自己调整即可

【 js 基础 】作用域和闭包

一.编译过程 常见编译性语言,在程序代码执行之前会经历三个步骤,称为编译. 步骤一:分词或者词法分析 将由字符组成的字符串分解成有意义的代码块,这些代码块被称为词法单元. 例子: var a = 2; 这一句通常被分解成为下面这些词法单元:var .a . = .2.; . 步骤二:解析或者语法分析 将词法单元流(数组)转换成一个由元素逐级嵌套所组成的代表了程序语法结构的树.这个树被称为"抽象语法树"(Abstract Syntax Tree, AST) 例子: var .a . =