js-engine-work

js是如何工作的,这里主要是针对典型的chrome v8来阐述。

他主要是由两个部分组成Memory HeapCall 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