一、let(声明变量)
特征:
1.变量不能重复声明
let lxy = "fff";
var lxy = red; //控制台会报错
2.块级作用域
以块为作用域,而 var 则表示全局有效
var a=1;
if(a>0){
let a =3;
console.log(a); //此处输出的是 let定义的a
}
console.log(a); //此处输出的是var的a
------------------------------------------------------------------
for(let i=0;i<=7;i++){
console.log(i); //输出1-7 没有什么疑问
}
console.log(i); //此处会报错 因为上面的那个i是在for那个块中定义的,而这个i在全局中,但全局中并没有i所以会报错
3.不存在变量提升
不允许在变量声明之前使用该变量,会报错
console.log(aa); //输出undefined 因为var定义的变量会预解析 就是告诉页面中有这么个东西,但具体是多少还不知道
var aa = "lxy";
------------------------------------------------------------------------------
console.log(aa); //报错 let定义的东西不会预解析,所以程序会一步一步往下走,当要输出aa时发现已解析的东西中没有aa 所以直接报错
let aa = "lxy";
4.不影响作用域链
二、const(声明常量)
注意事项:
1.常量一定要赋初始值
2.常量名一般都是大写字母
3.常量的值不能修改
4.块级作用域
三、箭头函数
var fn = function(){};
||
var fn = ()=>{};
//当函数中仅有一条语句,并且使用return返回该语句时,就可以省略{}和retuen
(a,b)=>{
rteurn a+b ===> (a,b)=>a+b;
}
//当函数的参数只有一个时,可以省略()
//但如果函数的参数没有或者有一个以上,必须加()
(a)=>a+10; ===> a=>a+10;
箭头函数改变this指向
只需要记住 箭头函数中的this 始终永远指向箭头函数在声明时所在作用域下的this
var a=1;
function fn(){
var f=()=>{
console.log(this);
}
}
fn();
//箭头函数在声明时所在作用域下的this指向的是window,所以箭头函数中的this也指向windows
var o={
a:1,
b:function(){
var fn=()=>{
consloe.log(this);
}
fn();
},
c:3
}
o.b();
//箭头函数在声明时所在作用域下的this指向的是o,所以箭头函数中的this也指向o