一.调用栈执行

2020-11-18  本文已影响0人  林不羁吖

1.JavaScript引擎

1.1 V8引擎

1.是什么?

1.2 运行时

什么是运行时?有什么用?

1.3 调用栈

1.what?

调用栈是一个记录程序运行到哪里的数据结构。调用函数的时候,我们会把它放到栈的最顶部。从函数返回的时候,我们会把它从栈的最顶部弹出来。这就是调用栈做的所有的事情。

function multiply(x, y) {
    return x * y;
}
function printSquare(x) {
    var s = multiply(x, x);
    console.log(s);
}
printSquare(5);
image.png

2.调用栈的状态

每次进入调用栈的函数都会成为栈帧。
当一个异常抛出时,栈的记录就是根据栈帧组成的。
当一个异常发生的时候调用栈的状态。看一下如下代码:

function foo() {
    throw new Error('SessionStack will help you resolve crashes :)');
}
function bar() {
    foo();
}
function start() {
    bar();
}
start();
image.png

“栈溢出”

"栈溢出"发生在超过调用栈最大空间的时候。
当你使用递归但又没有非常严格的测试你的代码的时候很容易发生。看一下如下代码示例

function foo() {
    foo();
}
foo();

当引擎开始执行这段代码的时候,首先调用“foo”函数,但是这个函数是递归的,开始调用自己并且没有结束条件。所以每一步执行,相同的函数都会一遍又一遍的加入到调用栈中,看上去就像这样


image.png

然而在某个时间点上调用栈中的函数调用数量将会超过调用栈的实际大小,此时浏览器决定采取行动,抛出一个错误,我们就会看到像下面这样的提示:


image.png

3.并发和事件循环

在调用栈中存在需要花费很多时间的函数调用时会发生什么呢?这就是下一篇文章要讨论的并发和事件循环

转自https://juejin.im/post/6844903734011494413#heading-2

上一篇 下一篇

猜你喜欢

热点阅读