1. 作用域指一个变量的作用范围

全局作用域

全局作用域中变量为全局变量,在页面的任意部分均可访问

  • 直接便携在script标签中的代码,都属于全局作用域
  • 全局作用域在页面打开时创建,在页面关闭是销毁
  • 全局作用域中有一全局对象window(代表浏览器的窗口,由浏览器创建可直接使用)

在全局作用域中,所创建的变量都会作为Window对象的属性保存;
所创建的函数都会作为window对象的方法保存。

声明提前

变量提升(变量的声明提前):

使用var关键字声明变量,会在所有代码执行前被声明,但不被赋值。

函数声明提前:

提前创建:
使用函数声明形式创建的function函数会在所有代码执行前被创建
function fun() {}
不提前创建:
使用函数表达式吃昂间的函数,不会被声明提前,不能再声明前被调用。
var fun2() = function() {}

函数作用域

  • 调用函数时创建函数作用域,函数执行完毕后被销毁
  • 没调用一次函数就创建一次函数作用域,不同次调用之间作用域独立
  • 函数中可以访问全局,全局中不可访问函数
  • 函数作用域操作变量,自身有则直接用,自身无则去上一级寻找(此上一级可函数可全局)
  • 函数作用域中要访问全局变量可使用window对象

    函数作用域也存在声明提前

    • 用var关键字声明,会在函数中所有的代码执行之前被声明
    • 函数声明也会在函数中所有代码执行前执行
    • 函数中,不使用var关键字声明的变量都会成为全局变量
    • 定义形参就相当于在函数作用域中声明了变量