本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我。不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定的几行代码,我们需要知道其输出内容和顺序。因为javascript是一门单线程语言,所以我们可以得出结论:
image.png然而实际上js是这样的:
依照 js是按照语句出现的顺序执行这个理念,我自信的写下输出结果:
我们真的要彻底弄明白javascript的执行机制了。
导图要表达的内容用
- javascript是按照语句出现的顺序执行的
![a33a185e123a97bf4aa2b5969ccdd026.png](https://i-blog.csdnimg.cn/blog_migrate/81ac637ddd7de567a3a560f4af124f4f.png)
![5107fc3a19da479ad17e63a2144b093a.png](https://i-blog.csdnimg.cn/blog_migrate/6f419ac3e83e52e2c04d558752650387.jpeg)
![c7fa26207156fbce8cec0bc7f4c66d0c.png](https://i-blog.csdnimg.cn/blog_migrate/61aea4d24bd85f0c197368d55012db91.png)
![185af89c9c77faab258eb1d21e4f4ab5.png](https://i-blog.csdnimg.cn/blog_migrate/1342dd72adbfe4898a14f1b568700a56.jpeg)
//"定时器开始啦"
//"马上执行for循环啦"
//"执行then函数啦"
//"代码执行结束"复制代码
去chrome上验证下,结果完全不对,瞬间懵了,说好的一行一行执行的呢?
![1797f8b131cab57869f272e88766170d.png](https://i-blog.csdnimg.cn/blog_migrate/fdd8892ebb698470d507fc99a09895a1.jpeg)
1.关于javascript
javascript是一门 单线程语言,在最新的HTML5中提出了Web-Worker,但javascript是单线程这一核心仍未改变。所以一切javascript版的"多线程"都是用单线程模拟出来的,一切javascript多线程都是纸老虎!2.javascript事件循环
既然js是单线程,那就像只有一个窗口的银行,客户需要排队一个一个办理业务,同理js任务也要一个一个顺序执行。如果一个任务耗时过长,那么后一个任务也必须等着。那么问题来了,假如我们想浏览新闻,但是新闻包含的超清图片加载很慢,难道我们的网页要一直卡着直到图片完全显示出来?因此聪明的程序员将任务分为两类:- 同步任务
- 异步任务
![439ec7622f58b86c370e0842d97956f6.png](https://i-blog.csdnimg.cn/blog_migrate/ccb37ae7903aa3af454487336fe6bc71.jpeg)