欢迎提供意见
let
ES6新增了let来声明一个变量,这个变量只在该块级作用域中有效,并且使用let会有以下几点注意事项:
- 使用
let声明变量并不会进行变量提升,所以不能在声明之前调用 - 使用
let声明的变量不能重复声明 - 暂时性死区:在作用域创建阶段,在作用域中如果出现
let,const声明了一个变量,那这个变量就会与该块级作用域绑定(就是会被创建,但是并不能使用),只有在let声明之后再使用。从创建到可以使用这一阶段叫做暂时性死区。
以下为错误示范:
// 使用let声明变量并不会进行变量提升,所以不能在声明之前调用
test1 = '骑着单车的人'; // 报错:ReferenceError
console.log(test1)
let test1;
test1 = '骑着单车的人';
console.log(test1)
// 使用let声明的变量不能重复声明
let test1;
let test1; // 报错 :SyntaxError
// 暂时性死区
var test1 = 1
function a() {
test1 = 2 // 报错:ReferenceError
console.log(test1)
let test1 = 1
}
a()const
ES6给我们提供了
const命令,声明一个只读的常量。一旦声明,常量的值就不能改变。在使用const时,我们需要注意以下几点:const一旦声明变量,就必须立即初始化,不能留到以后赋值。如果只声明不赋值就会报错。const与let相同声明的常量同样属于块级作用域,不会进行变量提升。const存在暂时性死区。cosst声明的常量不能重复声明- 对于复合型的数据,常量只保存的地址,比如对象,你可以任意更改对象上的属性值,但是不能去更改地址,比如把这个对象换成另一个。
以下为错误示范:
// const一旦声明变量,就必须立即初始化,不能留到以后赋值。如果只声明不赋值就会报错
const test1 = 111;
const test2; // 报错:SyntaxError
// const与let相同声明的常量同样属于块级作用域,不会进行变量提升
console.log(test1) // 报错:ReferenceError
const test1 = 111
// const存在暂时性死区
var test1 = 1
function a() {
console.log(test1) // 报错:ReferenceError
const test1 = 1
}
a()
// const声明的常量不能重复声明
const test1 = 1;
const test1 = 2; //报错:SyntaxError
// 对于复合型的数据,常量只保存的地址
const test1 = {};
test1.name = '骑着单车的人';
console.log(test1);
test1 = {} // 报错:TypeError大哥大姐看完点个赞吧!!!