图解JS词法环境(Lexical environment)
来源:互联网 发布:分班软件 编辑:程序博客网 时间:2024/06/06 10:47
在ES5中使用lexical environment来管理静态作用域,而不再是ES3中的AO/VO
词法环境就是描述环境的对象,主要包含两个部分: - 环境记录(Environment Record) 记录相应环境中的形参,函数声明,变量声明等 - 对外部环境的引用(out reference)
代码示例 :
var x = 10;function foo(y){ var z = 30; function bar(q){ return x + y + z + q; } return bar;}var bar = foo(20);bar(40);
环境初始化 : 在执行函数/全局代码之前进行环境初始化
**设置outer reference**先确定当前环境的外部引用(函数环境与该函数的scope属性有关)**环境记录初始化:就是我们常遇到的声明提前**在执行全局代码或者函数代码之前,先扫描相应环境中的形参,函数声明,变量声明并将其记录在环境记录中(Environment Record)全局代码执行前,先初始化全局环境函数代码执行前,先初始化函数环境
图解上述代码中foo()函数的环境记录初始化 :
var bar = foo(20);//foo()函数在执行之前会进行foo环境的环境初始化//先设置foo环境的外部引用(通过foo()函数的scope属性)//将形参y:20,z:undefined记录在环境记录中//在初始化环境记录遇到函数声明时会创建一个内部函数对象,这个函数对象有一个scope属性指向函数声明所在的环境,如在该代码示例中,扫描到bar()函数声明时会在foo environment中创建一个内部函数对象,其scope属性指向bar()函数声明所在的foo environment,重要的一点是:当开始执行bar()函数前初始化bar()函数的环境时,就把bar()函数的scope属性指向的foo environment 赋值给bar环境的out reference作为其外部引用.
如图所以:
环境初始化完成之后,就开始执行环境中的代码
1 0
- 图解JS词法环境(Lexical environment)
- 词法分析(lexical analysis)
- JAVA语言词法(lexical)--正则表达式描述
- clojure 词法变量lexical和动态变量dynamic
- Java语言系列02——Lexical Grammar (词法)介绍
- js的词法作用域、执行环境、作用域链
- 好东东-汉语词法分析系统ICTCLAS (Institute of Computing Technology, Chinese Lexical Analysis System)
- js词法分析
- js词法分析
- js高级词法分析
- JS词法作用域
- js词法分析
- js-词法结构
- JS-1-词法结构
- js的词法分析
- js-----词法分析过程
- R: 如何理解变量和环境的Lexical Scoping Rule
- 谈环境问题 environment
- RESTIful API设计
- 静态代理与动态代理
- HashMap和Hashtable探究
- 你只是看起来很努力—这篇文章一定会让你产生共鸣,想起自己或者身边的人。
- NYOJ 1221找数达人(背包问题)
- 图解JS词法环境(Lexical environment)
- BZOJ 1412: [ZJOI2009]狼和羊的故事 最小割
- jsp语言基础(2)
- 加载配置文件
- String.valueOf()
- 文章标题
- 1043. 输出PATest
- Qt如何设置任务栏中该应用的图标
- npm的--save和--save-dev参数