JS作用域的总结

242 阅读1分钟

ES5作用域:

  1. ES5定义变量通过var
  2. ES5没有块级作用域的概念
  3. ES5函数外都是全局作用域
  4. ES5函数内都是局部作用域

ES6作用域:

  1. ES6定义变量通过let
  2. ES6括号外都是全局作用域
  3. ES6函数内都是局部作用域,无论是var还是let定义都是局部变量
  4. ES6括号和函数没有结合在一起是块级作用域,通过var定义的变量是一个全局变量,通过let定义的变量是一个局部变量

注意点:无论是在块级作用域还是在局部作用域, 省略变量前面的let或者var就会变成一个全局变量

作用域链:

  1. ES5/ES6作用域链 1.1. 全局作用域我们又称之为0级作用域 1.2. 定义函数或{}代码块开启的作用域就是1级/2级/3级/...作用域 1.3. JavaScript会将这些作用域链接在一起形成一个链条, 这个链条就是作用域链 0 ---> 1 ----> 2 ----> 3 ----> 4

  2. 变量在作用域链查找规则 2.1 先在当前作用域找, 找到就使用当前作用域的 2.2 如果当前作用域中没有找到, 就去上一级作用域中查找 2.3 以此类推直到0级为止, 如果0级作用域还没找到, 就报错