普通函数和箭头函数的区别:
普通函数中的this:
1、this总是代表它的直接调用者, 例如 obj.func ,那么func中的this就是obj
2、在默认情况(非严格模式下,未使用 ‘use strict’),没找到直接调用者,则this指的是 window
3、在严格模式下,没有直接调用者的函数中的this是 undefined
4、使用call,apply,bind(ES5新增)绑定的,this指的是 绑定的对象
箭头函数:
箭头函数没有prototype(原型),所以箭头函数本身没有this
箭头函数的this在定义的时候继承自外层第一个普通函数的this。
如果箭头函数外层没有普通函数,严格模式和非严格模式下它的this都会指向window(全局对象)
箭头函数本身的this指向不能改变,但可以修改它要继承的对象的this。
箭头函数的this指向全局,使用arguments会报未声明的错误。
箭头函数的this指向普通函数时,它的argumens继承于该普通函数
使用new调用箭头函数会报错,因为箭头函数没有constructor
箭头函数不支持new.target
箭头函数不支持重命名函数参数,普通函数的函数参数支持重命名
箭头函数相对于普通函数语法更简洁优雅
箭头函数的注意事项及不适用场景
箭头函数的注意事项:
箭头函数一条语句返回对象字面量,需要加括号
箭头函数在参数和箭头之间不能换行
箭头函数的解析顺序相对||靠前
不适用场景:箭头函数的this意外指向和代码的可读性。
附上两位大神的链接:
原文:https://www.cnblogs.com/freelyflying/p/6978126.html
这位大神写的非常详细:
原文:https://blog.csdn.net/m0_37686205/article/details/88776259