你不知道的JS系列学习笔记<一>---作用域

117 阅读1分钟

什么是作用域

作用域是一整套规则,用于确定在哪以及如何查找变量.

理解代码执行过程

举个例子 var a = 2,编译器会把代码分为两步:

  1. var a 查找作用域是否存在该名称的变量,如果没有,声明一个新的
  2. a = 2 引擎执行LHS查询,找到变量的容器本身,以便进行赋值,与之相对应的是RHS查找,可以理解为 retrieve his source value(取到他的原值)

作用域嵌套

当一个块或者一个函数嵌套在另一个块或者函数中时,就发生了作用域的嵌套.

function foo(){
    return a
}
var a = 1;
foo()

当在函数作用域中无法找到变量a时,引擎就会去上级作用域查找,直到抵达最外层(即全局作用域)

异常

失败的RHS查找会抛出ReferenceError异常,失败的LHS查找会导致自动隐式创建一个全局变量(非严格模式),或者抛出ReferenceError异常(严格模式)