关于 js 的作用域的对话过程的理解

首先, 这场对话的成员有:

  • 引擎

   负责整个 Javascript 程序的编译和执行过程

  • 编译器

   负责语法分析和代码生成

  • 作用域

   负责收集并维护所有的声明标识符组成的一系列查询, 并制定一套非常严格的规则, 确定当前执行的代码对这些标识符的访问权限


对话, 用 var a = 2; 来举例说明

  1. 遇到 var a, 编译器会问作用域是否有一个 a 名称的变量存在于同一个作用域的集合中. 如果有, 编译器会忽略该声明, 继续进行编译. 否则的话会要求作用域在当前的作用域的集合中声明一个新的变量, 并命名为 a;
  2. 接下来编译器会为引擎生成运行时需要的代码, 这些代码被用来处理 a=2 这个复制操作.(编译器会编译成引擎认识的代码) 接下来引擎在运行的时候也会询问作用域是否有这个变量, 如果有, 引擎直接使用这个变量进行执行就可以. 否则会继续查找该变量.

   如果引擎最终找到了 a 变量, 就会将 2 赋值给他. 否则引擎就会举手示意并抛出一个异常

   [注:] 编译器会进行声明 引擎只做执行

猜你喜欢

转载自www.cnblogs.com/evilr/p/11526392.html