箭头函数的理解
一、形式理解:
1.定义方式function变成=>
例:
a.普通函数:function (){}
b.箭头函数:()=>{}
2.函数名匿名和具名变成匿名
例:
a.普通函数:
1)具名:
function learn(){}
2)匿名:
let learn=function(){}
b)箭头函数:
1)匿名:
let learn=()=>{}
二、用法理解:
1.不能如普通函数一样用于构造函数
例:
a.普通函数用于构造函数:
function learn(){
this.name=“Tom”
console.log(this.name)
}
let learnOne=new learn()
b.箭头函数不能使用new,用于构造函数
2.this的指代不同
a.普通函数:
1)ES5中,this永远指向最后调用它的那个对象,第一个this.age打印出30,第二个this.age打印出undefined,名字是Amy
例:
var name=“Tom”,age=30
var obj={
name:“Amy”,
objAge:this.age,
learn:function(){
console.log(this.name+“年龄”+this.age)
}
}
console.log(obj.objAge)
obj.learn()
2)用作构造函数,this指向对象本身learn{},打印值是Amy
例:
var name=“Tom”
function learn(){
this.name=“Amy”
console.log(this.name)
}
let learnOne=new learn()
b.箭头函数本身没有this,但是它在声明时可以捕获其所在上下文的this供自己使用,此处引用实例化的对象this,打印值是Amy
var name=“Tom”
function learn(){
this.name=“Amy”
let learnCopy=()=>{
console.log(this.name)
}
learnCopy()
}
let learnOne=new learn()
三、深入理解
1、箭头函数的 this 永远指向其上下文的 this ,任何方法都改变不了其指向,如 call() , bind() , apply()
2、普通函数调用后都具有一个arguments对象,用来存储实际传递的参数。但是箭头函数并没有此对象
3、箭头函数不能Generator函数,不能使用yeild关键字。
4、箭头函数不具有prototype原型对象。
5、箭头函数不具有super。
6、箭头函数不具有new.target。