let和const的共同属性:
声明的变量只在它所在的代码块有效。
不存在变量提升
暂时性死区 ---> 只能在声明的位置后面使用。
不允许重复声明(内层作用域可以定义外层作用域的同名变量。)比如说:
function f1() {
let n = 5;
if (true) {
let n = 10;
}
console.log(n); // 5
}
块级作用域
没有块级作用域的坏处:
内层变量可能会覆盖外层变量。
用来计数的循环变量泄露为全局变量,比如说: 变量i只用来控制循环,但是循环结束后,它并没有消失,泄露成了全局变量。
var s = 'hello';
for (var i = 0; i < s.length; i++) {
console.log(s[i]);
}
console.log(i); // 5
有一个地方需要注意: ES6 的块级作用域必须有大括号,如果没有大括号,JavaScript 引擎就认为不存在块级作用域。
// 第一种写法,报错
if (true) let x = 1;
// 第二种写法,不报错
if (true) {
let x = 1;
}
2. const
声明一个只读的常量。一旦声明,常量的值就不能改变。
const
声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。
最后:
ES6 声明变量的六种方法
ES5 只有两种声明变量的方法:var
命令和function
命令。ES6 除了添加let
和const
命令,还有另外两种声明变量的方法:import
命令和class
命令。所以,ES6 一共有 6 种声明变量的方法。