js进栈出栈(入栈和出栈的过程)

图片授权基于 www.pixabay.com 相关协议
若想解释清楚入栈和出栈,就要先理解「函数调用」「函数执行上下文」「全局执行上下文」。

首先说函数调用,函数是如何被调用的?

函数在声明的时候其实就是在声明一个变量。例如:

    function webFn(){    return \\\'Hello Word\\\'}

    上面这段代码在浏览器引擎解析时是这样的:

      webFn = function(){    return \\\'Hello Word\\\'}

      Function 关键字后面跟的「webFn」其实是一个变量名。在词法分析的时候就会定义 webFn 这个变量,而调用这个函数的方法是用 () 一对括号来调用,一个简单的函数就这样执行了。

      函数上下文和全局上下文

      上下文的意思就是:当前的执行环境。我们知道了怎样调用函数,那函数是如何被引擎处理的呢?首先我们知道 JavaScript 的执行顺序是从上往下依次执行。

        let a1 = 1;function webFn(){    let a2 = 2;    return a1 + a2;}webFn();

        这段代码一共 6 行,我们来分析这段代码的执行顺序。首先创建「全局上下文」,全局环境入栈。

        js进栈出栈(入栈和出栈的过程)

        执行到第 2 行的时候是一个函数,先声明,但不处理:

        js进栈出栈(入栈和出栈的过程)

        随后直接执行第 6 行,调用 webFn() 来创建一个新的上下文环境「函数执行上下文」。在内部是这样执行的:

        js进栈出栈(入栈和出栈的过程)

        初始的时候呢,只存在一个全局执行上下文,当你调用函数后,就出现了该函数执行上下文。指针是一直都在最顶栈的,所以会先执行最顶栈的代码。

        入栈和出栈是什么意思

        知道了上下文的关系,就容易理解出入栈的规矩了。栈嘛,先入后出。先执行全局环境,全局环境先入栈,随后又调用了函数,那函数也入栈了。如果函数内还有其他函数,那就会继续入栈。

        js进栈出栈(入栈和出栈的过程)

        那出栈的时候呢,JavaScript 是从上向下执行的,后进去的函数先出去,从栈顶到栈底的执行顺序。当前栈位置是由「指针」决定的,执行完当前函数,出栈销毁当前上下文环境后,指针会自动向下移动。「闭包除外,虽然指针移动,但变量不销毁」

        js进栈出栈(入栈和出栈的过程)

        什么是栈溢出?

        如果代码中含有无限递归方法,就会一直有方法入栈,无限循环下去就导致了栈溢出,说白了就是栈太多,处理不过来了。

        亲手体验一下栈的状态

        Chrome 出入栈效果

        内容和图片来源于:极客时间《浏览器工作原理与实践》

        原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34539.html

        (0)
        小道研究's avatar小道研究
        上一篇 2024年4月8日 上午9:31
        下一篇 2024年4月8日 上午9:33

        相关推荐

        • 如何设置个人服务器

          搭建个人服务器可以按照以下步骤进行:一、确定需求和用途首先明确你搭建个人服务器的目的,例如搭建网站、文件存储、游戏服务器、开发测试环境等,这将决定服务器的配置和

          2024年9月21日
          0
        • 为什么要用树莓派编程

          使用树莓派编程有多种好处:1、成本效益高、2、教育与学习工具、3、灵活性与可定制化。其中,树莓派在教育上的优势尤为值得注意。该设备非常适合学生和初学者,因为它提供了一个低风险的实验…

          网站运维 2024年5月12日
          0
        • 为了提高你的房地产学习,你可能需要这些书

          编辑推荐65天,每天学习一个知识点,天天都有新进步 物业管理讲服务,日常维护不疏忽 监管创优要兼顾,业主满意零投诉 岗位职责 管理技能 专业技能,打造令业主满意

          2024年9月20日
          0
        • 现在用的编程是什么

          现在流行的编程语言有多种,包括Python、JavaScript、Java、C#和Go等,每种语言都有其独特的应用场景和优势。Python 是当今广泛使用的高级编程语言。Pytho…

          网站运维 2024年5月12日
          0

        发表回复

        您的邮箱地址不会被公开。 必填项已用 * 标注