ES6 新增了let
命令,用来声明变量。它的用法相似于var
,可是所声明的变量,只在let
命令所在的代码块内有效。javascript
{ let a = 10; var b = 1; } a // ReferenceError: a is not defined. b // 1
var
命令会发生”变量提高“现象,即变量能够在声明以前使用,值为undefined
。这种现象多多少少是有些奇怪的,按照通常的逻辑,变量应该在声明语句以后才能够使用。java
为了纠正这种现象,let
命令改变了语法行为,它所声明的变量必定要在声明后使用,不然报错。函数
// var 的状况 console.log(foo); // 输出undefined var foo = 2; // let 的状况 console.log(bar); // 报错ReferenceError let bar = 2;
let
不容许在相同做用域内,重复声明同一个变量。spa
// 报错 function func() { let a = 10; var a = 1; } // 报错 function func() { let a = 10; let a = 1; }
所以,不能在函数内部从新声明参数。code
function func(arg) { let arg; // 报错 } function func(arg) { { let arg; // 不报错 } }