1.外观不同:
箭头函数有箭头定义,普通函数没有
// 普通函数
function func(){
// code
}
// 箭头函数
let func=()=>{
// code
}
2.箭头函数不能用于构造函数
普通函数可以用于构造函数,以此创建对象实例。 箭头函数不能即不能使用new
function Person(name,age){
this.name=name;
this.age=age;
}
let admin=new Person("打嗝小鱼",22);
console.log(admin.name);
console.log(admin.age);
代码运行结果如下
打嗝小鱼
22
3.箭头函数中this的指向不同
在普通函数中,this总是指向调用它的对象,如果用作构造函数,this指向创建的对象实例。
1.箭头函数本身不创建this
也可以说箭头函数本身没有this,但是它在声明时可以捕获其所在上下文的this供自己使用。
注意:this一旦被捕获,就不再发生变化
var webName="成功捕获";
let func=()=>{
console.log(this.webName);
}
func();
运行结果如下:
成功捕获
2.结合call(),apply()方法使用
箭头函数结合call(),apply()方法调用一个函数时,只传入一个参数对this没有影响
3.箭头函数不绑定arguments,取而代之用rest参数…解决
每一个普通函数调用后都具有一个arguments对象,用来存储实际传递的参数。但是箭头函数并没有此对象。
4.其他不同
(1).箭头函数不能Generator函数,不能使用yeild关键字。
(2).箭头函数不具有prototype原型对象。
(3).箭头函数不具有super。
(4).箭头函数不具有new.target。
5.总结
(1).箭头函数的 this 永远指向其上下文的 this ,任何方法都改变不了其指向,如 call() , bind() , apply()
(2).普通函数的this指向调用它的那个对象