ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
<script>
{
let a = 1;
var b = 2;
}
console.log(a, b);
</script>
上面代码在代码块之中,分别用let和var声明了两个变量。然后在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。表明,let声明的变量只在它所在的代码块有效。
只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
<script>
var tmp = 123;
if (true) {
tmp = 'abc';
let tmp;
// 此处报错Uncaught ReferenceError
}
console.log(tmp);
</script>
const声明一个只读的常量。一旦声明,常量的值就不能改变。
const PI = 3.1415;
常量的命名规范:全部用大写字母,单词之间用下划线。
在ES5中使用var声明变量是允许重复声明的,通过第一小节预编译的知识大家应该也可以明白原因:在预编译的时候JS引擎就收集了所有的var声明的变量并将声明提升至作用域的顶端。作为ES6新的定义关键字,let不允许相同的变量被重复的定义。