1.箭头函数
- 箭头函数是用来简化函数定义语法的。
()=>{}
- ()是用来放形参的
- ()代表函数体
- 通常会把箭头函数赋值给一个变量,如const fn=()=>{}
{
let arrow=(x,y)=>{
return x+y
}
console.log(arrow(1,2));//3
}
- 如果只有一个参数,可以省略小括号,函数体只有一句并且为返回值,可以简写省略大括号。
{
let corrow1= x => x+1
console.log(corrow1(3));
}
2.箭头函数里this的指向
箭头函数不同于传统JavaScript中的函数,箭头函数并没有属于自己的this,它所谓的this是捕获其所在上下文的 this 值,作为自己的 this 值,并且由于没有属于自己的this,所以是不会被new调用的,这个所谓的this也不会被改变。
- 需要操作对象本身时要用普通函数,不能用箭头函数,箭头函数指向的是window,无法操作对象的属性。
- 函数里调用其他的方法,对于普通函数,谁调用他他就指向谁,就近原则,对于箭头函数则直接指向对象。
- 总结来说箭头函数的this指向调用这个函数对象的外层对象。
{
let obj = {
name:'apple',
age:19,
show:function(){
console.log('function',this);//obj
window.setTimeout(function(){
console.log('window-function',this);//window
})
window.setTimeout(()=>{
console.log('window-箭头',this);//obj
})
// console.log(this.age,this.name);//是有内容的apple 19
},
show2:()=>{
console.log('箭头',this);//window
// console.log(this.age,this.name);//undefined 箭头函数指向的是window,无法操作对象的属性
}
}
obj.show();
obj.show2();
}
3.箭头函数和普通函数的区别?
- 箭头函数比普通函数更加简洁
- 如果没有参数,直接写()即可
- 如果只有一个参数,()可以省略
- 如果参数有多个,可以用逗号分隔
- 如果函数体只有一句,可以直接省略{}
2.箭头函数没有自己的this指向
- 箭头函数本身没有自己的this指向,它的this是父级普通函数的this
3.call()、apply()、bind()等方法不能改变箭头函数中this的指向
4.箭头函数不具有 arguments 对象
- 每一个普通函数调用后都具有一个arguments 对象,用来存储实际传递的参数。但是箭头函数并没有此对象。
5.箭头函数不具有prototype原型对象。
6.箭头函数不能作为构造函数使用
- 普通函数可以用于构造函数,以此创建对象实例。
7.箭头函数不能当做Generator函数,不能使用yield关键字
8.箭头函数不具有super。