zoukankan      html  css  js  c++  java
  • 函数调用栈

    一 、什么是调用栈
      程序代码在运行过程中,会有一个叫做调用栈(执行栈、控制栈)的概念。

      调用栈是一种栈结构,用来存储计算机程序执行时候其活跃子程序的信息。

      调用栈是解析器的一种机制。几乎所有计算机程序依赖于调用栈,然而高级语言一般将调用栈的细节隐藏至后台。

      这里用一段代码示例,看看到底什么事调用栈,它是一个怎样的运行机制。

      

    function boo (a) {
        return a * 3
      }
      function foo (b) {
        return boo(4) * 2
      }
      console.log(foo(3))

    一 、运行解析

      1 console.log(foo(3)) 执行,形成一个栈帧,调用foo函数,再形成另一个栈帧。
      2 新的栈帧压在上一个栈帧之上,继续执行代码,foo函数中又调用了boo函数,形成了另一个栈帧压在旧栈帧之上。然后执行boo。
      3 当执行完boo时候,返回值给foo函数之后,boo被推出调用栈,foo函数继续执行,然后foo函数执行完,

      返回值给console.log,foo函数被推出调用栈,console.log得到foo函数的返回值,运行,输出结果,最后console.log也被推出调用栈,该段程序执行完成。

     

      

    三 、总结

      调用栈其实就是一种解析器去处理程序的机制,它是栈数据结构。它能追踪子程序的运行状态。
     1 当脚本要调用一个函数时,解析器把该函数添加到栈中并且执行这个函数。并形成一个栈帧
     2 任何被这个函数调用的函数会进一步添加到调用栈中,形成另一个栈帧,并且运行到它们被上个程序调用的位置。
        3 当执行完这个函数后,如果它没有调用其他函数,则它会从调用栈中推出。然后调用栈继续运行其他部门。
        4 异步函数的回调函数一般都会被添加到运行队列里面,如settimeout会在响应的时间后把回调函数放入队列中,

      队列里的函数需要等栈为空时才会被推入栈中执行。如果队列中有其他函数,需要等队列前面的函数被堆入调用栈中之后才会运行。

  • 相关阅读:
    PHP入门
    bootstrap框架
    jsp5 include forward param
    jsp4 Cookie
    网页定位导航
    jsp3 javabean
    Obsidian md安装闪退
    Excel 2016 Mac VBA 的变化 窗体消失
    Excel Mac 2016 调用 Applescript
    如何自学R
  • 原文地址:https://www.cnblogs.com/cdut007/p/9706829.html
Copyright © 2011-2022 走看看