一个变量作用域是源代码中定义这个变量的区域;
在ES5当中,声明变量一般用的是var,var有声明变量提升
在源生js里,没有块级作用域,它的作用域分为两种情况,一种是全局作用域,另一种是函数作用域;
全局作用域
在ES5当中,全局变量拥有全局的作用域,在js内的任何地方都是有定义的,简单的来说,全局对象之内,函数之外定义的变量属于全局变量,如若全局作用域之内声明的变量过多,则会影响代码运行的速度,使页面加载变得过慢,浪费性能
在全局作用域当中,声明变量可以不用var来声明
函数级作用域
函数作用域是指在函数内声明的所有变量在函数体内始终是清晰可见的,这意味着变量在声明之前甚至已经可用,这个特性被称为“声明提前”
在函数内声明的变量,只在函数体内有定义,属于局部变量,作用域是有局限性的,在函数体内,局部变量优先于全局变量,如果函数内部变量和全局变量重名,则函数内部的变量会遮盖全局的变量
在函数内声明变量,不用var来声明时,相当于隐形的创建了一个新的全局变量