解答
(1)js的工作机制:
当线程中没有执行任何同步代码的前提下才会执行异步代码,setTimeout是异步代码,所以setTimeout只能等js空闲才会执行,但如果在其之前存在死循环,死循环是永远不会空闲的,所以setTimeout也永远不会执行。
即使setTimeout为0,他也是等js引擎的代码执行完之后才会插入到js引擎线程的最后执行。
(2)js是如何处理异步操作的?
js 引擎执行异步代码而不用等待,是因有为有 消息队列和事件循环。
· 消息队列:消息队列是一个先进先出的队列,它里面存放着各种消息。
· 事件循环:事件循环是指主线程重复从消息队列中取消息、执行的过程。
迷茫很久也看过各式各样的答案,选不出一条自己的路真的很焦灼。没有想到原来大家的路也是一样的颠簸。
浏览器的渲染引擎和js的解析引擎是冲突的
js是单线程语言,无法同步执行多个任务;js通过回调函数执行异步机制。
当线程中没有执行任何同步代码的前提下才会执行异步代码