ES6 let和const命令
一.let命令
基本用法:
let用来声明变量, 用法类似于var, 但是声明的变量只在let命令所在的代码段中有效.
{
let a = 1;
var b = 2
}
a //a is not defined
b //2
不存在变量提升
var命令会存在变量提升现象, 即变量可以在声明之前使用, 值为undefined.
console.log(a); // undefined
var a = 1;
condole.log(b); // 报错
let b = 2
暂时性死区
只要块级作用域内存在let命令, 它所声明的变量就’绑定’这个区域, 不再受外界影响.
var a = 1;
if(true){
b = 2; //报错
let b
}
ES6明确规定, 如果区块中存在let和const命令, 这个区块对这些命令声明的变量, 从一开始就形成了封闭作用域, 所以在let声明变量前, 对b赋值会报错.
不允许重复声明
let不允许在相同作用域内, 重复声明同一个变量.
因此, 不能在函数内部重新声明参数.
二. const命令
const声明一个只读的常量, 一旦声明, 常量的值就不能改变.
const a = 1;
a = 2;
//" "a" is read-only"
- const声明的变量不能改变值, 所以在声明变量时, 就必须立即初始化, 不能留到以后赋值(会报错).
- const和let作用域相同: 只在声明所在的块级作用域内有效.
本质:
const声明的变量指向的是那个内存地址所保存的数据不得改动. 如果数据是复合类型的数据(主要是对象和数组), 依然可以为其添加新的属性. 但是所指向的地址不能改变.
冻结的对象
如果使用Object.freeze方法将对象冻结, 那么添加新属性时不会起作用, 严格模式下会报错.
const foo = Object.freeze({ })
foo.prop = 123 //报错
还没有评论,来说两句吧...