js执行的上下文

执行的上下文


程序在解析和运行的时候所依赖和使用的环境

  • 全局执行上下文环境和函数执行上下文(全局环境和函数环境)

执行上下文栈

  • 程序为了管理执行上下文,所创建耳朵栈数据结构

预解析(变量提升)

  • 先解析函数,函数重名覆盖
  • 再解析变量,变量重名忽略(声明会被忽略但是赋值还是存在的)

作用域

  • 变量起作用的范围

    • 函数定义在哪它的作用域就在那
  • 作用域隔离变量,防止变量名被污染

  • 作用域定义时候确定

作用域链

  • 是真实存在的,作用域链是使用执行上下文当中变量对象组成的链条结构(数组结构)
  • 查找的时候起始真正是先去自身变量对象中查找,如果没有,就去上级执行上下文的变量对象中查找,知道找到全局执行上下文
  • 内部函数没有对外部函数没有对外部函数的局部变量时,外部函数的变量对象是不会出现在内部函数的作用域链上的(引用关系)

全局执行上下文

  • 创建阶段和执行阶段
  • 全局执行上下文压入执行上下文栈
    • 创建执行上下文阶段:
      • 1、收集变量形成的变量对象(函数、var的变量会收集)
      • 2、确定this指向
      • 3、创建自身执行上下文作用域链
  • 执行管局上下文执行上下文
    • 执行全局上下文阶段
      • 为变量真正赋值
      • 看作用域链查找和使用的变量或函数执行

函数执行上下文

  • 1、函数执行上下文压栈

    • 1、收集变量(var、arguments、形参、函数)
    • 2、确认this指向
    • 3、创建自身执行的上下文的作用域(同时确定函数调用的时候的上级作用域链)

    函数的作用域链:自己顶一的时候已经确定了函数在调用的时候的上级作用域链,因此,再函数调用的时候,需要讲自己的变量对象添加到上级作用域链的顶端,就形成了自己的作用域链

  • 2、执行函数执行上下文

    • 为变量真正赋值
    • 顺着作用域链查找要使用的变脸或者函数执行

创建全局执行上下文——全局执行上下文压栈——执行全局执行上下文——创建函数执行上下文——

函数执行上下文压栈——执行函数执行上下文——函数执行上下文出栈——执行全局执行上下文——全局执行上下文出栈

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值