1.引擎: 从头到尾负责整个js程序的编译和执行
2.编辑器:负责语法分析及代码生成等
3.作用域:负责收集并维护由所有声明的标识符组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限
4.var a = 2; 编译器做的处理:1) 遇到var a,编译器会询问作用域是否已经有一个该名称的变量存在于同一个作用域的集合中。如果是,编译器会忽略该声明,继续进行编译;否则他会要求作用域在当前作用域的集合中声明一个新的变量,命名为a。
2) 编译器会为引擎生成运行时所需的代码,这些代码被用来处理a=2这个赋值操作。引擎运行时会首先询问作用域,在当前的作用域集合中是否存在一个叫作a的变量。如果否,引擎就会使用这个变量;如果不是,引擎会继续查找该变量,如果引擎最终找到了a变量,就会将2赋值给它,否则引擎就会举手示意并抛出一个异常
5.引擎为变量a进行LHS查询和RHS(retrieve his source value)查询。
1)console.log(a) RHS,需要查找并取得a的值。
2)a=2,LHS,不需要关心当前的值是什么,只想找到=2的目标
6.编译器可以在代码生成的同时处理声明和值的定义
js作用域
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
- 如果我的文章对你有用,请给我一个赞,让我有继续坚持的动力/微笑。原创文章,此文章仅供学习参考使用,欢迎访问我的个人...