作用域

某个变量合法的使用范围,分为如下三种:

  • 全局作用域

最高级对象的一个属性,web端是window

  • 函数作用域

    1. function fn () {
    2. var a = 100;
    3. console.log(a);
    4. }
    5. console.log(a); // 别的地方使用就会报错,a is not defined
  • 块级作用域(ES6)

    1. if (true) {
    2. // 块级作用域
    3. let a = 100;
    4. console.log(a)
    5. }
    6. console.log(a); // 别的地方使用就会报错,a is not defined

自由变量

一个变量再当前作用域未定义,但被使用了
向上级作用域,一层一层依次寻找,直到找到为止;
如果在全局作用域都没找到,则报错:xxx is not defined

(所有)自由变量的查找,是在函数定义的地方,向上级作用域查找,不是在执行的地方

作用域链

变量一层一层向上找的过程,直到找到全局作用域