箭头函数和普通函数之间,除了this不同,还有什么区别?
箭头函数和普通函数有什么区别?一直以来只了解this不同,真没深入研究过,最近刚好有时间,做个小总结:
-
箭头函数比普通函数更加简洁:
- 如果函数没有参数,可以只写一个括号;
- 如果只有一个参数,可以省略括号,当然有些项目eslint会有相关要去,推荐保留这个小括号;
- 可以省略函数体大括号,这种情况只适用于函数体只有一条语句(或者可以拼合成一条语句)的情况,并且此写法会把此条语句的执行结果作为返回值;
- 无返回值的函数体,可以给这个语句前面加一个void关键字,当然不加void时,效果也一样。
-
箭头函数不存在自己的作用域,所以箭头函数里的this会继承箭头函数声明环境的this,并且这个指向是不能改变的,call、apply、bind这种“对象冒充”方法,对箭头函数无效。这个特性也是我们日常撸码最多利用的箭头函数的特性。
-
箭头函数缺少一些普通函数的特性:
- 箭头函数没有自己的arguments;
- 箭头函数没有prototype。
-
箭头函数有一些使用限制:
- 箭头函数不能用作构造函数;
- 箭头函数不能用作Generator函数,不能使用yeild关键字。