【JS基础】执行上下文和执行栈

执行上下文和执行栈

什么是执行上下文?

执行上下文是当前JavaScript代码被解析和执行的一个环境。执行上下文包含了当前代码的变量和函数声明、作用域链、this的值等信息。

执行上下文生命周期

  1. 创建阶段:在这个阶段,执行上下文会创建变量对象、建立作用域链、确定this的值。在这个阶段,函数声明和变量声明会被提升到作用域的顶部。
  2. 执行阶段:在这个阶段,执行上下文会执行代码,变量赋值、函数调用等操作都会在这个阶段进行。
  3. 回收阶段:在这个阶段,执行上下文会被销毁,变量和函数声明会被回收。

变量对象

变量对象是执行上下文中的一个对象,它包含了当前执行上下文中的变量和函数声明。在创建阶段,变量对象会被创建,并且函数声明会被提升到作用域的顶部。在执行阶段,变量对象会被激活,变量和函数声明会被赋值。在浏览器中,window对象就是全局执行上下文的变量对象。

作用域链

作用域链是执行上下文中的一个对象链,它包含了当前执行上下文中的变量和函数声明。当在执行上下文中查找一个变量时,会先在当前执行上下文的变量对象中查找,如果找不到,就会沿着作用域链向上查找,直到找到为止。

执行栈

执行栈是JavaScript引擎中的一个数据结构,它用于管理执行上下文的创建和销毁;先进后出,用来存储代码运行的有执行上下文
1.当JS引擎第一次遇到js脚本时,会创建一个全局上下文并且压入当前执行栈中
2.当JS引擎遇到一个函数调用,他会该为函数创建一个新的执行上下文,并且压入执行栈的顶部
3.当函数执行完毕,执行上下文会从执行栈中弹出,并且控制权交回给之前的执行上下文
4.一旦所以代码执行完毕,JS引擎从当前栈中移除全局执行上下文

var a = 1 // 1.全局上下文环境

function bar () {
  console.log('bar')
  var b = 2
  fn (x + b) // 3.fn
}
function fn (c) {
  console.log('fn', c)
}

bar(3) // 2.bar上下文环境

全局、函数、Eval执行上下文

执行上下文分为全局、函数、Eval执行上下文
1)全局执行上下文(浏览器环境下,为全局的 window 对象)
2)函数执行上下文,每当一个函数被调用时, 都会为该函数创建一个新的上下文
3)Eval 函数执行上下文,如eval(“1 + 2”)
对于每个执行上下文,都有三个重要属性:变量对象、作用域链(Scope chain)、this

执行上下文的特点:

1)单线程,只在主线程上运行;
2)同步执行,从上向下按顺序执行;
3)全局上下文只有一个,也就是window对象;
4)函数每调用一次就会产生一个新的执行上下文环境。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值