settimeout执行顺序(JS的代码执行有哪些先后顺序)

本文目录
- JS的代码执行有哪些先后顺序
- 关于setTimeout函数实现:重置功能
- js 怎么让方法执行有先后顺序
- js定时器 settimeout和其他代码是同步执行还是异步执行
- setTimeout和setImmediate以及process.nextTick的区别
- setTimeout()这个方法不执行
JS的代码执行有哪些先后顺序
在执行过程中,先遇到for循环,for循环先进入线程。当i=1时,循环走到setTimeOut后,此时的for循环还没有执行完成,setTimeOut就会被放入一个地方(线程池)等待执行。此时for循环继续执行,当i=2时,for循环仍没有执行完,这时的setTimeOut仍会被放在线程池中等待执行……依次类推,直到for循环转完3遍后,for循环执行完了,此时线程空闲了,在线程池中等待执行的setTimeOut依次执行打印i,而for循环执行完成后,i变成了4,所以打印出了三个4。
关于setTimeout函数实现:重置功能
作为一门编程语言,现在的js在大部分浏览器上是不能实现多线程的,代码执行都是按顺序走,当然也就会造成阻塞,比如你写一句这样的代码:
while(1){}
在代码链中的后续代码统统都不会被执行了,因为程序不走过这一句就不会往下延续,同样如果有一段代码需要非常复杂的运算而耗时很长,也会造成浏览器失去响应几秒钟,对用户体验来说这是很糟糕的
setTimeout和setInterval是js提供的timer函数,一个实现延迟执行,另一个实现循环执行,它们的共同点就是可以实现一个伪线程(并不是真正实现了多线程),因为他们不会对现有的代码链造成阻塞,即使你在timer函数里面写了很复杂的代码,也不会造成浏览器假死,这也就是这段代码用了setTimeout的意图,当然它们还有很多其他的用途,以后或许你会慢慢遇到
js 怎么让方法执行有先后顺序
1、定义几个方法
2、依次执行函数,代码写在前面的先执行,写在后面的后执行
示例:
function f1(){//定义f1函数}
function f2(){//定义f2函数
}
f1();//先执行f1函数
f2();//再执行f2函数
js定时器 settimeout和其他代码是同步执行还是异步执行
js是同步执行的,一个简单示例解释,
for(var i = 0;i 《 10;i++)
console.log(i)
for(var i = 10;i 《 20;i++)
console.log(i)
以上两个for循环,第一个打印1-10,第二个打印10-20,结果是1-20按顺序输出
js中代码是同步执行的,只有在ajax的情况下,会导致代码执行顺序改变,是因为ajax的请求时间导致
setTimeout和setImmediate以及process.nextTick的区别
两者的区别
在理解两者的区别之前要说一下轮询
前面博客也有记录,nodejs中是事件驱动的,有一个循环线程一直从事件队列中取任务执行或者I/O的操作转给后台线程池来操作,把这个循环线程的每次执行的过程算是一次轮询.
2.setImmediate()的使用
即时计时器立即执行工作,它是在事件轮询之后执行,为了防止轮询阻塞,每次只会调用一个。
3.Process.nextTick()的使用
它和setImmediate()执行的顺序不一样,它是在事件轮询之前执行,为了防止I/O饥饿,所以有一个默认process.maxTickDepth=1000来限制事件队列的每次循环可执行的nextTick()事件的数目。
4.总结
在网上百度的关于它们的总结:
nextTick()的回调函数执行的优先级要高于setImmediate();
process.nextTick()属于idle观察者,setImmediate()属于check观察者.在每一轮循环检查中,idle观察者先于I/O观察者,I/O观察者先于check观察者.
在具体实现上,process.nextTick()的回调函数保存在一个数组中,
setImmediate()的结果则是保存在链表中.
在行为上,process.nextTick()在每轮循环中会将数组中的回调函数全部执行完.
而setImmediate()在每轮循环中执行链表中的一个回调函数.
setTimeout()这个方法不执行
setTimeout()方法的第一个参数是一个闭包,它指定了要运行的函数。它的第二个参数是一个数值,表示的是以毫秒计算的运行延时。注意传递给setTimeout()的第一个参数也可以是表示执行代码的字符串,如果是字符串,那么setTimeout()方法会调用Function对象将这个字符串构造成函数执行。
setTimeout及setinterval都是异步执行的函数,就是它会在触发事件发生(延迟时间)之后去执行调用事件,这个过程并不会中断顺序执行的过程,而不是象c语言中的delay一样,延迟的是顺序执行的过程。而该过程大概是开启了另外的一个线程。

更多文章:
androidapp源码免费下载(如何实现APK的反编译得到APK的源码)
2026年9月22日 18:00
service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)
2026年9月22日 10:20
html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)
2026年9月22日 10:10
结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)
2026年9月22日 09:40
cocos creator中文(cocoscreator和cocoscreator3d的区别)
2026年9月22日 02:30




