天天在用es6,但是自己还没有详细的做过一份知识点整理。
前两天写代码碰到await和async,傻眼了。。完全忘了是什么。。。
现在开始好好的整理一下,保不齐哪天es7出来,那我es6还没搞明白就不好了。。
let声明变量只在let命令所在的代码块内有效。
{
let a=10;
var b=1;
}
a //error : a is not defined.
b //1
let声明的变量一定要在声明后使用,不存在变量提升。
暂时性死区:在代码块内,使用let命令声明变量之前,该变量都不可用。
在没有let之前,typeof是安全的,but现在如果在暂时性死区里,声明前使用会报错。
do表达式
因为块级作用域没有返回值,所以有个提案,让块级作用域变成表达式,可以返回值。
let x = do {
let t = f();
t * t + 1;
}
(我试了一下,果然还只是个提案。。)
const命令
const声明一个只读的常量,声明后不可改变,所以声明时就得赋值。其他与let用法相似。
const保证的是变量指向的内存地址不得改动。简单的数据类型值就保存在变量指向的内存地址,对于复合型数据则保存的是指针,只能保证指针固定,对象本身是可以变动的。
// 只在声明所在的块级作用域内有效
if(true){
const a = 5;
}
a //Uncaught ReferenceError: a is not defined
//声明不提升,存在暂时性死区
if(true){
console.log(a); // ReferenceError
const a = 1;
}
//不可重复声明
var message = 'hello';
let age = 25;
const message = 'hi' //报错
const age = 100 //报错