一.let和const命令
1.var存在缺陷
- var可以重复用同一个变量名申明变量
- var没有块级作用域
块级作用域:{},if(){},for(){},要在其用var只能用闭包形式(自执行函数)但只有在function(){}中有作用域。 - var存在变量提升。(刚开始只申明了变量 var a,在中间过程中使用了a;但a是在最后才赋值的 a=10,但a在中间过程中还是可以使用)
所以在不存在兼容性问题的时候一般都选用Let。
2.const 用来解决var限定修改的缺点,用来申明常量。用法与let 基本一致,但const是申明和赋值必须一起操作。
二. 箭头函数和this指向问题
1.**箭头函数:**即function换成 => 放在参数和函数体中间。
- 如果没有参数或者有多个参数就需要使用()来定义参数列表。
- 如果只有一个参数,可以不用()。
- 如果函数体中只有一条语句,可以不用{},就不用使用return,会自动加上。
//es5定义函数
function fun (x){
return x+x;
}
const fun1=function(x){
return x+x;
}
//箭头函数
x=>x+x;
2.关于箭头函数this指向问题
- 普通函数的this:指向它的调用者,如果没有调用者则默认指向window.
- 箭头函数的this:指向箭头函数定义时所处的对象,而不是箭头函数使用时所处的对象,默认使用父级的this。即箭头函数没有自己的this,它的this是继承而来,默认指向定义它时所处的对象(宿主对象)。