一.外形不同:箭头函数使用箭头定义,普通函数中没有
代码实例如下:
二.箭头函数都是匿名函数
普通函数可以有匿名函数,也可以有具体名函数,但是箭头函数都是匿名函数。
代码实例如下:
三.箭头函数不能用于构造函数,不能使用new
普通函数可以用于构造函数,以此创建对象实例。
代码实例如下:
代码运行如下:
恩诺小弦18Person用作构造函数,通过它可以创建实例化对象。
但是构造函数不能用作构造函数。
四.箭头函数中this的指向不同
在普通函数中,this总是指向调用它的对象,如果用作构造函数,this指向创建的对象实例。
1.箭头函数本身不创建this
也可以说箭头函数本身没有this,但是它在声明时可以捕获其所在上下文的this供自己使用。
注意:this一旦被捕获,就不再发生变化
运行结果如下:
捕获成功代码分析:箭头函数在全局作用域声明,所以它捕获全局作用域中的this,this指向window对象。
例子:
var name = "恩诺1";function wrap(){ this.name="恩诺2"; let func=() => { console.log(this.name); } func();}let en=new wrap();运行结果如下:
恩诺2代码分析:
(1)wrap()用作构造函数。
(2)使用new调用wrap()函数之后,此函数作用域中的this指向创建的实例化对象。
(3)箭头函数此时被声明,捕获这个this。
(4)所以打印的是恩诺2,而不是恩诺1。
2.结合call(),apply()方法使用
箭头函数结合call(),apply()方法调用一个函数时,只传入一个参数对this没有影响。
3.箭头函数不绑定arguments,取而代之用rest参数…解决
每一个普通函数调用后都具有一个arguments对象,用来存储实际传递的参数。但是箭头函数并没有此对象。
4.其他区别
(1).箭头函数不能Generator函数,不能使用yeild关键字。
(2).箭头函数不具有prototype原型对象。
(3).箭头函数不具有super。
(4).箭头函数不具有new.target。
总结:
(1).箭头函数的 this 永远指向其上下文的 this ,任何方法都改变不了其指向,如 call() , bind() , apply()
(2).普通函数的this指向调用它的那个对象
参考
https://www.cnblogs.com/biubiuxixiya/p/8610594.html
https://www.softwhy.com/article-9330-1.html