1、var 是在全局范围内有效,可以多次声明
2、var与const 、let的区别:
let 跟 var 的作用差不多,但有着非常重要的区别。最明显的区别是, let 声明的范围是块作用域,而 var 声明的范围是函数作用域。
const 、let是es6及其以上版本的关键字
es6命名规范:
常量 const 声明一个只读的常量,一旦声明,常量的值就不能改变。
变量 let 声明的变量只在 let 命令所在的代码块内有效,只能声明一次,否则会报错
3、var关键字具体用法:
3.1:定义:要定义变量,可以使用 var 操作符(注意 var 是一个关键 字),后跟变量名(即标识符): var message;
这行代码定义了一个名为 message 的变量,可以用它保存任何 类型的值。(不初始化的情况下,变量会保存一个特殊值 undefined)
3.2:var 声明作用域:
3.2.1:
使用 var 操作符定义的变量会成为包含它的 函数的局部变量。
比如,使用 var 在一个函数内部定义一个变量,就意味着该变量将在函数退出时被销毁:比如:
这里, message 变量是在函数内部使用 var 定义的。函数叫 test() ,调用它会创建这个变量并给它赋值。调用之后变量随 即被销毁,因此示例中的最后一行会导致错误。
3.2.2:
不过,在函数内 定义变量时省略 var 操作符,可以创建一个全局变量:
去掉之前的 var 操作符之后, message 就变成了全局变量。 只要调用一次函数 test() ,就会定义这个变量,并且可以在函 数外部访问到。
3.2.3:message首先是全局变量,被定义为:false布尔类型,之后被又被重写为个保存字符串值 hi 的变量,所有不会报错
3.3 var声明提升:
使用 var 时,下面的代码不会报错。这是因为使用这个关键字 声明的变量会自动提升到函数作用域顶部:
之所以不会报错,是因为ECMAScript运行时把它看成等价于如下 代码:
这就是所谓的“提升”(hoist),也就是把所有变量声明都拉到函数作用域的顶部。此外,反复多次使用 var 声明同一个变量也 没有问题: