经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
箭头函数的副作用
来源:cnblogs  作者:老豆浆  时间:2021/4/6 10:09:54  对本文有异议

一、前言

项目中,我习惯上能用箭头函数的地方都用箭头函数,这样我就不用随时操心this作用于的问题,而且对于书写上也很方便。也搜索过相关文章,里面也建议尽量使用箭头函数。当然,箭头函数也不是万能,肯定无法取代普通函数。
那么,究竟箭头函数需要注意哪些呢?

二、一些常见的问题

(代码在控制台测试)

1.作用域this的指向问题

this指向被创建的地方,或者是被实例化的地方;

  • 对象方法,
  1. let A = {
  2. a:'a',name:()=>console.log(this,this.a)
  3. }
  4. console.log(A);// S {a: "a", name: ?}
  5. console.log(A.name());//
  • prototype的方法
  1. function A(){
  2. this.a = "a";
  3. }
  4. A.prototype.name = ()=>console.log(this,this.a);
  5. (new A).name();//Window,undefined,this.a 的this指向了window
  • 动态上下文中的回调函数 click的回调

2. 无法被new,不能做构造函数

3. 需要获取arguments参数

三、性能问题

  1. class F{
  2. f = ()=>{
  3. console.log('f');
  4. }
  5. fp(){
  6. console.log('fp');
  7. }
  8. }
  9. class B extends F{
  10. b = ()=>{
  11. console.log('f');
  12. }
  13. bp(){
  14. console.log('bp');
  15. }
  16. }
  17. let fc = new F();
  18. let fc2 = new F();
  19. let bc = new B();
  20. console.log(fc,fc2,bc);
  21. console.log(fc2.f == fc.f);//false
  22. console.log(fc.f == bc.f);//false
  23. console.log(fc.fp == bc.fp);//true

我们发现,f (箭头函数)并没有被继承下来,每次新建的时候都是一份copy。

四、总结
上文的第二部分《一些常见的问题》中的问题,并不能抵消箭头函数带来的便利性。相反,普通函数也有各种各样的问题。
虽然对于性能要求不是很高的场景,箭头函数的确提高了生产力,解放了我们思考 this 的时间,但对于性能要求比较高的场景,还是需要评估。

参考:
https://stackoverflow.com/questions/22939130/when-should-i-use-arrow-functions-in-ecmascript-6#:~:text= Arrow functions should not be used%3A ,want to use named function as arrow... More

https://wesbos.com/arrow-function-no-no

原文链接:http://www.cnblogs.com/wyy5552/p/14604515.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号