一、作用域是什么
1、什么是【作用域】?
答: 编程代码需要一套设计良好的规则来储存变量,并且之后可以方便地找到这些变量,这套规则被称为“作用域”。 主要用于确定“当前执行代码”对这些变量的“访问权限”。
** 精简: 作用域:是根据名称查找变量的一套规则。**
2、“所有代码”都会经历哪些步骤?
答:“所有代码”都会【先编译,后执行】。
3、“编译”那些事?
-
【编译】又分为3个步骤:(1)分词/词法分析 (2)解析/语法分析 (3)代码生成
-
【编译】: 大部分情况下,“编译”发生在代码执行前的几微秒(甚至更短)的时间内。
4、例子(重点看看)
问题: 为什么结果是 undefined ?
console.log(a); // 结果:undefined`
var a = 2;
说明:这段代码会有2个步骤:
- 步骤一:【先声明】在代码运行前(编译阶段),首先编译器会在当前作用域中“声明一个变量”
- 步骤二:【在赋值】在代码运行时,引擎会在作用域中查找该变量,如果能过找到就会对它赋值。
二、作用域的“查找过程”
- LHS查询:【查询变量,并给变量赋值】
- RHS查询:【取值】获取某个变量的值 例子:
- console.log(a) 是 “RHS查询”
- a = 2 是 “LHS查询”
三、作用域的“嵌套”
1、作用域的“嵌套”是如何形成的?
答:当“一个块或函数”嵌套“在另一个块或函数”中时,就发生了【作用域的嵌套】。
2、作用域链的“查找规则”?(重要)
答: 引擎从【当前作用域】开始查找变量。如果找不到,就向【上一级】继续查找。当抵达【全局作用域】时,无论找到还是没有找到,“查找过程”都会停止。