JavaScript 全局作用域(Day13)

28 阅读2分钟

作用域

  1. 定义: 变量的作用范围
  2. 分类:
    1. 全局作用域
    2. 函数作用域

全局作用域

  • 直接写在script标签中的JS代码在全局作用域中

  • 在页面打开时创建,在页面关闭时销毁

  • 全局作用域中声明的变量都是全局变量

    • 在页面的任意位置均可访问
  • 全局作用域中有一个全局对象window可直接使用

    • 代表浏览器的窗口
    • 由浏览器创建
    • 用户可直接使用
  • 作用:

    • 创建的变量均可作为window对象的属性保存

          var a=10
          console.log(window.a)
          // 结果:10
      
    • 创建的函数均作为window对象的方法使用

          function fun(){
              console.log('我是fun方法')
          }
          window.fun()
          // 结果: 我是fun方法
      
  • 变量提升

    • 表现
      • 使用var关键字声明变量并赋值,声明部分会在所有代码执行前被声明
      • 若变量的使用(调用)在声明之前,该变量的结果为undefined
      • 若未使用var关键字则不存在变量提升
    • 原因
      • 浏览器运行代码先编译,在执行
      • 编译后生成执行上下文和可执行代码
      • 执行上下文 :内部保存变量、函数、函数的参数、函数的this指向等信息,所有声明语句都会在编译时被解析保存在对应的上下文中
      • 可执行代码 :可理解为除声明语句外的语句,如赋值语句、循环语句、函数调用等
      • 代码执行时,JS引擎会从上到下按行执行编译阶段生成的可执行代码
  • 函数提升

    • 使用声明式声明函数,调用可在声明之前,不会产生报错
    • 使用赋值式声明函数,先使用、在声明会报错(与变量提升有关)
    • 函数提升优先级大于变量提升