JS的执行栈的理解

最近在刷面试题,当看到函数执行栈的时候有点百思不得其解,我当时理解的执行栈不就是函数的执行顺序吗,函数执行顺序按照调用顺序从上到下运行,异步的站到一边留个标记,其他同步的接着运行,和执行栈的“先进后出”原则也不是一回事啊

后来经过多方了解,结合自己的理解尝试写下自己的理解,如果有不对的大家多多批评指正,插一句嘴,下文不考虑异步函数的情况

现在我理解的执行栈是调用一个函数就是一个栈,在多个函数嵌套使用下遵循执行栈的“先进后出”原则,比如说有三个函数:foo、bar和baz,如果这三个函数分别调用,三个函数之间不存在嵌套关系,那么这三个函数就分别是三个不同的执行栈,分别遵循各自的“先进后出”原则,也就是我上面所说的按照调用顺序从上到下依次执行。而如果这三个函数存在嵌套关系,形成了一个函数调用链,那么此时最外层的那个函数先入栈执行内部代码,当执行到调用第二个函数的位置时,第二个函数入栈执行内部代码,当执行到第三个函数的位置时,第三个函数入栈,执行第三个函数的代码,此时第三个函数属于最后一个函数,没有其他的函数需要入栈,此时第三个函数率先出栈,接着第二个函数出栈,最后第一个函数出栈直到函数运行完毕,执行栈为空。

如果上面关于函数调用链看不懂的话可以结合下面的代码辅助理解,复制下来看看输出结果

function foo() {
    console.log("Entering foo");
    bar();
    console.log("Exiting foo");
}

function bar() {
    console.log("Entering bar");
    baz();
    console.log("Exiting bar");
}

function baz() {
    console.log("Entering baz");
    console.log("Exiting baz");
}
foo();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值