关于 js 的作用域的对话过程的理解
Posted evilr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 js 的作用域的对话过程的理解相关的知识,希望对你有一定的参考价值。
首先, 这场对话的成员有:
- 引擎
负责整个 javascript 程序的编译和执行过程
- 编译器
负责语法分析和代码生成
- 作用域
负责收集并维护所有的声明标识符组成的一系列查询, 并制定一套非常严格的规则, 确定当前执行的代码对这些标识符的访问权限
对话, 用 var a = 2; 来举例说明
- 遇到 var a, 编译器会问作用域是否有一个 a 名称的变量存在于同一个作用域的集合中. 如果有, 编译器会忽略该声明, 继续进行编译. 否则的话会要求作用域在当前的作用域的集合中声明一个新的变量, 并命名为 a;
- 接下来编译器会为引擎生成运行时需要的代码, 这些代码被用来处理 a=2 这个复制操作.(编译器会编译成引擎认识的代码) 接下来引擎在运行的时候也会询问作用域是否有这个变量, 如果有, 引擎直接使用这个变量进行执行就可以. 否则会继续查找该变量.
如果引擎最终找到了 a 变量, 就会将 2 赋值给他. 否则引擎就会举手示意并抛出一个异常
[注:] 编译器会进行声明 引擎只做执行
以上是关于关于 js 的作用域的对话过程的理解的主要内容,如果未能解决你的问题,请参考以下文章