let
1、let 声明变量的一种新的方式
2、用let声明的变量没有变量提升
3、for循环中用let声明 变为块级作用域 可以认为为局部变量
4、let更适用于for循环
5、let 变量不能重复声明
6、暂时性死区 把块级作用域锁死 同名的全局变量不能进入块级作用域(function())
var e=100;
function fun(){
e=200;
let e;//暂时性死区 把块级作用域锁死 同名的全局变量不能进入块级作用域(function())
console.log(3333,e)
}
fun()
var arr=[];
for(let i=0;i<5;i++){
arr[i]=function(){
console.log(i);
}
}
arr[2]()//输出2
arr[3]()//输出3
如果循环用var声明的话 对应上面的3,4条特性看
arr[2]()//输出5
arr[3]()//输出5
constant
constant(常量)
1.const-->constant 常量
2.constant 也是一种新的变量声明方式
3.声明之后 下面不能修改
4.一旦声明,需立即赋值
5.其他与let一致
书写方式:const Pa2=222 //之后在后面就不能更改Pa的值
arrow 箭头函数(=>)
1.箭头函数能保持当前的作用
2.使用箭头函数声明的函数,其作用域为声明时所在的位置(作用域)
3.箭头函数不能使用 new
4.箭头函数内部没有arguments
let obj = {
name:"sang",
say:function(){
console.log(this.name);
setTimeout(()=>{
console.log(4444,this.name);//输出为sang
//setTimeout()为异步函数 ,其中的this指向的为window,但是箭头函数把作用域固定在了setTimeout内部,所以输出不会变
},0)
}
}
obj.say();```
几种箭头函数的使用方式
var foo=()=>10;//简单的return 直接写在后面
console.log(foo());
let bar = (a,b,c)=>abc;
console.log(bar(10,20,1))
let a = (a,b)=>{//复杂逻辑关系要加上{},并且要有return
//只是举个例子
return a+b;
}
console.log(a(22,22))
function b(callback){//有回调函数或者参数时,接收的方式
callback();
}
b(function(){
console.log(111);
})
b(()=>{console.log(2222)})```