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

Posted evilr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 js 的作用域的对话过程的理解相关的知识,希望对你有一定的参考价值。

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

  • 引擎

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

  • 编译器

   负责语法分析和代码生成

  • 作用域

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


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

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

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

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

 

以上是关于关于 js 的作用域的对话过程的理解的主要内容,如果未能解决你的问题,请参考以下文章

js基础梳理-如何理解作用域和作用域链?

JS(作用域)_关于作用域的注意点

理解js中的自由变量以及作用域的进阶

js中理解函数作用域的实例

[刘阳Java]_步步窥探JS变量作用域

一道关于JS作用域的面试题