1、let命令
1)不允许在相同作用域内重复声明同一个变量。
let a = 100;
let a = 200; //报错
console.log(a)
2)变量使用时遵循“先定义,后使用”原则,不存在变量提升;用var声明可以在变量声明前使用,值为undefined,不报错,let会报错。
console.log(b) //报错
let b = 300
3)增加块作用域,let声明的变量只在let命令所在的代码块内有效
{
let c = 400;
console.log(c);
}
console.log(c) //报错
4)在ES6规范中,如果区块存在let命令,这个区块对let命令声明的变量,从该区开始就形成封闭作用域,凡是在声明之前使用这些变量就会报错,这称为“暂时性死区”
var d = 500
if(true){
d = 600; //报错
let d;
}
2、const命令
一旦声明值就不能改变,使用特性与let一样。
3、rest参数
1)形式:...变量名
2)只能出现在定义变量的最后,不能出现在其他位置
4、箭头函数
1)省略了关键字function,形式:(参数1,参数2,...,参数n)=>{函数体}
2)注意:
1、函数体内的this对象就是定义时所在的对象,而不是使用时所在的对象
document.onclick = function(){
setTimeout(function(){
console.log(this)
},1000)
}
输出:window
document.onclick = function(){
setTimeout(()=>{
console.log(this)
},1000)
}
输出:document
//箭头函数没有this对象,要去他的父级找,所以是document
2、不可以使用new命令
3、函数体内不存在arguments对象,不能调用
4、在对象的方法中不建议使用箭头函数
5、promise
1)用于异步操作,promise可以把层层嵌套的回调地狱拉成一个从上往下的执行队列。
var p = new Promise(function(resolve,reject){
//这里使用延时定时器模拟一个异步处理任务
setTimeout(function(){
var flag = false;
if(flag){
//异步操作成功
resolve("success")
}
else{
//异步操作失败
reject("failed")
}
},100);
);
p.then(function(res){
console.log(res);
},function(res){
console.log(res);
}
//输出:failed