Js 是单线程执行引擎。在我们动态修改一些属性时会产生两种效果:
1、Repaint ----- 一部分重画,修改 div 的颜色呀,但是尺寸没有改变。
2、Reflow ---- 元素的尺寸改变了,浏览器要重新布局。
浏览器是不会你改变一次样式它就会 repaint 或 reflow 一次。而是把这样的操作积攒一批,然后统一做一次 reflow。这又叫做异步 reflow或增量异步 reflow。就是一个函数执行完后把函数内所有样式一下执行完毕。
例如:我们在做一个简单的反选的时候,如果反选函数里面要执行一个很大的运算,即使反选代码执行完毕了,但是效果还是不会实现,而且会一直卡在哪里。因为 Js 是单线程,后面的运算占住了线程,所以浏览器在等待 Js 执行完毕,才会进行 reflow。我们可以把两个功能拆分开(因为函数执行完毕就释放了,只要函数内某一运算过分大就不会影响效果),然后把大的运算拆分成很小的函数,让定时器间隔调用,到达指定值定时器消失,。