在ES6(ECMAScript 6.0)中,声明变量的方式有三种(在ECMAScript 6.0版本之前只有var一种声明方式):
- var
- let
- const
const类似java中的final,在js中常量用const声明,声明之后值不可以改变,如:
在使用const声明a=12后,再将15赋值给a,编译器直接报错,const的作用域为代码块(被{}包裹)中。
这里需要注意的是,当const定义的是一个对象时,对象内部的值可以被改变,并且不会报错,这是因为变量指向的是其引用地址,只要不改变变量的引用地址就不会报错
例如:
const a = {
i:1
}
a.i = 2;
console.log(a.i);
上面的结果就是会输出2,
let声明的变量作用于也是代码块(块作用域),如:
运行后,在控制台报ReferenceError: i is not defined的错误,意思是没有定义i,如果把let换成var则可以正常输出12。因为var的作用域是函数块(函数作用域),即在整个函数中,不论是在if还是其他代码块中声明的变量,在函数的其他地方都可以调用,而let不能,let的做用范围只是在代码块中,类似java中的变量的作用域。