Let及const命令是ES6新增的两种新的声明格式,用于补全ES5标准中var声明变量的不足,下面具体介绍这两种命令。
1.1.1 let命令
在JS中是通过关键字“var”来声明变量的,但是在JS中用“var”来声明变量会出现变量提升的情况,代码如下:
console.log(a);
var a=10;
这段代码中,如果没有声明var a = 10的话,打印变量a会出现“a is not defined”的错误,但是用“var”声明变量“a”后,“a” 的打印结果是undefined,出现这种结果的原因是因为“var”声明变量时的提升机制(Hoisting)导致的。实际上,在执行过程中JS会把上面的代码解析成如下格式:
var a;
console.log(a);
a=10;
也就是说通过“var”声明的变量系统都会把声明隐式的提升至顶部,这样的特性往往会让刚接触JavaScript及习惯其他语言的开发人员不适应,导致程序出现问题。所以针对以上情况,ES6引入了let命令来声明变量。let声明和var声明用法一致,但是不会出现变量突然提升的情况,具体代码如下:
console.log(a);//UncaughtReferenceError:Cannot access 'a' before initializtion
let a = 10;
利用let声明还可以把变量的作用域限制在代码块中,ES5中定义作用域有两种,全局作用域和函数作用域。ES5中没有块级作用域的概念,因此ES6中新增了块级作用域,用{}表示。块级作用域用于声明作用域之外无法访问的变量。主要有两种:
1)函数内部块级作用域:
function test(){
let a = 20;
}
test();
console.log(a);
2)在字符{}之间的区域:
{
let a= 10;
}
console.log(a);
let 在使用过程中除了上述情况外,还需要注意let声明过程中是禁止重复声明的:
let a = 10;
let a = 20;