变量作用的范围称为作用域,作用是提高程序的可靠性,减少命名冲突
全局作用域
- 直接编写在script标签中的js代码
- 单独一个js文件中
- 有一个全局对象window(由浏览器创建),可直接使用
- 创建的变量,函数,都会作为window对象的属性和方法保存
局部作用域(函数作用域)
- 函数内部称为局部作用域
- 调用函数时创建局部作用域,函数执行完毕,函数作用域就立即销毁
- 每调用一次就会创建一个新的局部作用域,他们之间相互独立
块级作用域
- 用大括号({})包含的就是块级作用域
- es6作用域,只适用于const,let:
根据变量的作用域不同,变量可以分为全局变量和局部变量
全局变量
-
全局作用域下声明的变量叫全局变量
-
全局变量创建方式
-
- 全局作用域下var声明的变量
- 函数内部,没有使用var关键字声明,直接赋值的变量
局部变量
- 局部作用域下声明的变量叫局部变量
- 函数内部var声明的变量
- 函数的形参
自由变量
- 当前作用域中没有声明,但被使用了的变量
作用域链
当一个变量为自由变量时,它会向上级作用域一层一层查找,直到找到为止,最高找到全局作用域,就形成了作用域链。
变量提升
- var声明的变量,function声明的函数会进行变量提升
- let,const声明的不会进行变量提升