每个函数都会默认创建一个作用域

例子

  1. function fn(){
  2. let a = 1
  3. }
  4. console.log(a)//a不存在

a 只在函数作用域里生效,在外面访问不到

全局变量和局部变量

  • 在顶级作用域声明的变量是全局变量
  • window 的属性是全局变量
  • 其他都是局部变量

    函数可嵌套,作用域也可嵌套

    1. function f1(){
    2. let a = 1
    3. function f2(){
    4. let a = 2
    5. console.log(a)
    6. }
    7. console.log(a)
    8. a = 3
    9. f2()
    10. }
    11. f1()

    如果多个作用域有同名变量a

    那么查找 a 的声明时,就向上取最近的作用域
    简称「就近原则」
    查找 a 的过程与函数执行无关
    但 a 的值与函数执行有关

    1. function f1(){
    2. let a = 1
    3. function f2(){
    4. let a = 2
    5. function f3(){
    6. console.log(a)
    7. }
    8. a = 22
    9. f3()
    10. }
    11. console.log(a)
    12. a = 100
    13. f2()
    14. }
    15. f1()