JavaScript 引擎、运行时和调用栈概述

Hex 为您分享 / Github: @hex-ci

目录

  • JavaScript 引擎
  • 运行时
  • 调用栈
  • 并发和事件循环

JavaScript 引擎

  • 堆内存 - 在这里分配内存
  • 调用栈 - 用来存储代码执行时其活跃子程序的堆栈结构

运行时

调用栈

调用栈是一种数据结构,里面会记录我们在程序中的大概位置。

当执行进入一个函数,把它置于栈的顶部。

如果从函数中返回则从栈顶部移除函数。

这就是调用栈所能够做的事情。

调用栈


function multiply(x, y) {
  return x * y;
}

function printSquare(x) {
  var s = multiply(x, x);
  console.log(s);
}

printSquare(5);
          

当引擎开始执行这段代码的时候,调用栈会被清空。

调用栈

调用栈中的每个入口被称为堆栈结构。

调用栈

当发生异常的时候可以看到调用栈的状态


function foo() {
  throw new Error('SessionStack will help you resolve crashes :)');
}

function bar() {
  foo();
}

function start() {
  bar();
}

start();
          

堆栈溢出


function foo() {
  foo();
}

foo();
          

堆栈溢出

浏览器会显示如下错误

并发和事件循环

由于 JavaScript 只有一个调用栈,如果运行很慢会发生什么?

并发和事件循环

如何不阻塞 UI 且不让浏览器停止响应来执行运行缓慢的代码呢?

使用异步回调

----------------------------------------
更多内容,我们将在
《在 V8 引擎中如何写最佳代码的 5 条小技巧》
分享中进行详细阐述

THE END

谢谢!