js-engine-work
js是如何工作的,这里主要是针对典型的chrome v8来阐述。
他主要是由两个部分组成Memory Heap和Call Stack。
Memory Heap
这个就是内存分配发生的地方。
Call Stack
这个是一个调用栈。所有要执行的都会放在这个调用栈里(栈都是先进后出).
因为是单线程的,所以是一个个的执行下去。
正常情况下,一个函数开始,会把这个函数放入Call Stack执行。
那么非正常情况呢?比如一些异步操作,例如setTimeout.
setTimeout是属于Web Apis,他不会被自动(自动会在下面解释)加入到Callback Queue (Event Queue)以及Call Stack. 他会有个计时,等待计时结束之后,才会将其放入到Callback Queue,等待Call Stack清空之后(放在调用栈末尾),才会自动加入到Call Stack执行。
下面我们来说说自动. 其实这个自动就是Event Loop的功能,他一直在轮训事件,类似一个永动机似的。

Last updated