JS栈溢出

1,617 阅读1分钟

为什么会出现栈溢出

  1. 回答这个问题要知道一下知识点:

    • js执行是先编译后执行
    • 什么是函数调用
    • 什么是栈
    • 什么是调用栈
    • JS引擎执行的流程
    • 如何利用浏览器查看调用栈的情况
  2. 开始回答:

    当执行一段代码是,JS引擎会为其创建全局执行上下文,包括变量环境、词法环境、语法环境、this、外部引用、可执行代码,创建好之后开始执行全局代码,当执行到函数时,JS引擎会对其编译并创建改函数的执行上下文和可执行代码,然后执行代码输出结果;当存在多个函数时,JS引擎通过栈的数据结构来管理多个执行上下文(栈是一种先进后出的数据结构,操作有出栈、入栈、栈满、清栈),也就是JS的调用栈,当执行一段代码时,JS引擎先编译并创建全局执行上下文并压入栈低,当执行到函数时会编译该函数并为其创建执行上下文,然后入栈;之后的函数执行也以此类推,当函数执行完之后会该函数的执行上下文会被弹出栈顶,之后的函数执行也以此类推,最后调用栈中只剩下全局执行上下文,此时整个JS流程执行结束;

    有两种方式可以查看调用栈的情况:

    1. console.trace()
    2. 控制台Call Stack查看调用栈情况