es6中的词法环境和变量环境

es6中的词法环境和变量环境

  1. 词法环境
    词法环境是一种规范类型,用于词法嵌套解构中定义关联的变量,函数等标识符
    一个词法环境进场用于关联一个函数声明,代码块语句,try-catch语句,当他们的代码被执行的时候,词法环境被创建出来
  • 词法环境的分类
    1. 全局环境
      没有外部环境引用的词法环境,外部环境引用为outer: null,拥有内建的object/ array对象等。在环境记录器里的原型函数,还有全局对象
    2. 函数环境
      用户定义的变量存储在环境记录器,外部引用outer可以为全局环境,也可以为包含此内部函数的外部函数
  • 词法环境的组成
    • 环境记录
    • outer
    1. 环境记录
    • 环境记录的组成 + 声明式环境记录 + 对象式环境记录
    1. 声明式环境记录
      声明式环境变量记录用来定义es语法元素的效果,比如函数声明变量声明,以及直接将标识符绑定于es语言值关联起来的catch子句 (函数环境中)
    2. 对象环境记录器
      用来定义出现在全局上下文中的变量和函数的关系 (全局环境)
    GlobalExectionContext = {
    	LexicalEnvironment: {
    		EnvironmentRecord: {
    			type: "Object"
    		}
    		outer: <null>
    	}
    }
    FunctionExectionContext = {
    	LexicalEnvironment: {
    		EnvironmentRecord: {
    			type:"Declarative"
    		}
    		outer:<Global or outer function environment reference>
    	}
    }
    
  1. 变量环境
    • 用来处理var和function声明的标识符
    let a = 20
    const b = 30
    var c ;
    function multiply(e, f) {
    	var g = 20
    	return e * f * g 
    }
    c = multiply(20, 30)
    
    执行上下文如下
    GlobalExectionContext = {
    	ThisBinding: <Global object>,
    	LexicalEnvironment: {
    		EnvironmentRecord: {
    			type: "Object",
    			a: <uninitialized>  // 内存中已经为变量预留出空间,但是还没有和对应的标识符建立绑定关系,js引擎对函数的声明进行了特殊的处理,允许和var一样进行变量提升,但是不会访问出值,会报错
    			b: <uninitialized> 
    		}
    		outer: <null>
    	},
    	VariableEnvironment: {
    		EnvironmentRecord: {
    			Type:'object',
    			c:undefined
    			multiply: <func>
    		}
    		outer: <null>
    	}
    }
    FunctionExectionContext = {
    	ThisBinding: <Global object>
    	LexicalEnvironment: {
    		EnvironmentRecord: {
    			type: "Declarative",
    			arguments: {0: 20, 1: 30, length: 2}
    		}
    		outer: <GlobalExectionContext>
    	},
    	VariableEnvironment: {
    		EnvironmentRecord: {
    			type: 'Declarative',
    			g: undefined
    		}
    		outer: <GlobalLexicalEnvironment>
    	}
    }
    
  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值