js执行上下文理解

本文深入探讨了JavaScript的执行上下文,包括全局、函数及Eval执行上下文的创建与生命周期。执行上下文在代码运行前经历创建、执行和回收三个阶段,涉及变量对象、作用域链和this的确定。同时,文章介绍了执行栈的工作原理,如何管理各个执行上下文的执行顺序。通过一个示例解释了函数调用时执行上下文的入栈与出栈过程。
摘要由CSDN通过智能技术生成

一.执行上下文

1.什么是执行上下文

  • 执行上下文就是当前JavaScript代码在被解析和执行时存在的环境(地方),只要有javascript代码运行,那么它就一定是运行在执行上下文中

2.执行上下文的分类
(1)全局执行上下文,这是默认的,最基础执行上下文

  • 不在函数内部的代码都位于全局执行上下文中
  • 全局执行上下文,只有一个,浏览器中的全局对象就是window对象,this指向这个全局对象

(2)函数执行上下文

  • 函数执行上下文:存在无数个,只有在函数被调用的时候才会被创建,每次调用函数都会创建一个新的执行上下文

(3)Eval函数执行上下文

  • Eval函数执行上下文:指得是运行在eval函数中的代码,很少用(了解即可)

3.执行上下文的生命周期

  • 执行上下文的生命周期包括三个阶段:创建阶段–执行阶段–回收阶段

(1)创建阶段
当函数被调用,但是未执行内部的任何代码之前,会做以下几件事

  • 创建变量对象:首先会初始化函数的参数arguments,提升函数声明和变量声明。
  • 创建作用域链:在执行上下文创建阶段,作用域链是在变量对象之后创建的,作用域链本身包含变量对象,作用域链用来解析变量的过程
  • 确定this指向,

(2) 执行阶段

  • 执行变量赋值,代码执行。

(3) 回收阶段

  • 执行上下文出栈,等待虚拟机回收执行上下文

二.执行栈

执行栈得理解

  • 执行栈,也叫调用栈,具有先进后出,后进先出,得原理,用于存储在代码执行期间创建得所有执行上下文我们可以吧执行栈想象为一个桶最先放进去得肯定是最后才拿出来的
  • 当javascript引擎开始执行你第一行脚本代码得时候,它就会首先创建一个全局环境,把它压到执行栈中最底层 每当引擎碰到一个函数得时候,它就会创建一个函数环境,然后将这个函数环境压到执行栈中(是压到全局环境上面的) 引擎会执行位于执行栈 栈顶得执行上下文(一般是函数环境),当该函数环境执行结束后,对应得执行上下文就会被弹出清除掉,然后控制流程到达执行栈得下一个执行上下文

举个例子

<script>
        var a = 10;
        //函数也是全局变量
        function f1() {
            var b = 11
        }
        f1()
    </script>

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值