调用栈:
调用栈与数据结构中的栈类似,它遵循后进先出的规则。调用栈是解释器追踪函数执行流的一种机制,通过这种机制我们能追踪函数的执行情况。

  • 当函数A被调用,将函数A地址放入调用栈
  • 如果A函数里面还调用了B函数,将B函数的地址放入调用栈
  • 当B函数执行完毕,将B函数地址弹出调用栈
  • 继续执行A函数,当A函数执行完毕也将A地址弹出调用栈
  • 在执行迭代时注意堆栈溢出

JS引擎结构如下:
[JS] Call stack 调用栈
JavaScript只有一个调用栈即是单线程的,它不能像多线程一样同时做很多事情,只能一件一件地做,所以它执行得比较慢,但单线程也让它不会出现多线程的死锁现象。

同步和异步事件
在网页渲染时,如果代码时从上到下依次执行,那么页面如果有大一点的音视频文件就会让页面后部分无法正常显示(js只时单线程的)。因此,在JavaScript机制中将事件分为了同步事件和异步事件。异步并不是真的异步,因为JavaScript只有一个调用栈。

相关文章: