JS定时器引发的问题
1.定时器真是定时执行的吗?
定时器并不能保证真正定时执行
一般是延迟一丁点(可以接受),也可能延迟很长时间(无法忍受)(在原来设定的时间基础上再做延迟)
2.定时器回调函数是在分线程执行的吗?
是在主线程执行,JS是单线程的
3.定时器是如何执行?




alert除了暂停当前主线程的执行,也会暂停定时器的计时
代码分类:
1)初始化代码 2)回调代码(异步执行)
JS引擎执行代码的基本流程
1)先执行初始化代码(包含一些特殊的代码)
2)设置定时器
绑定事件监听
发送ajax请求
3)后面在某个时刻才执行回调代码
如何证明JS执行是单线程的?
setTimeoout()的回调函数是在主线程执行的
定时器回调函数只有在运行栈中的代码全部执行完之后才有可能执行
为什么JS要用单线程模式,而不是多线程模式?
js的单线程和他的用途有关,作为浏览器的脚本语言,js的主要用途是操作dom,与用户互动,这就决定了它只能是单线程,否则就会带来很复杂的同步问题(多个线程操作同一个dom元素的时候,会出现谁先执行完的问题)
浙公网安备 33010602011771号