箭头函数=>

纸飞机 发表于 2021/10/18 23:40:50 2021/10/18
【摘要】 箭头函数是ES6引入的一种更简洁的函数写法。是匿名函数,只能作为表达式的操作数。语法:(参数)=> {函数体}。对比普通函数声明,箭头函数格式更简洁,没有自己的this,不能作为构造函数,没有arguments,没有函数提升。 1、简洁的代码格式 //只有 1个参数时,可以省略(),直接写参数名let double = x=&...

箭头函数是ES6引入的一种更简洁的函数写法。是匿名函数,只能作为表达式的操作数。语法:(参数)=> {函数体。对比普通函数声明,箭头函数格式更简洁,没有自己的this,不能作为构造函数,没有arguments,没有函数提升。

1、简洁的代码格式


  
  1. //只有 1个参数时,可以省略(),直接写参数名
  2. let double = x=>x+x;
  3. //有0个或者多个参数时,参数列表要用()包裹起来
  4. let add = (a,b)=>a+b
  5. let rand = ()=>Math.random();
  6. //函数体只有1条语句时,{}和 return 可省略,右边值自动隐式return
  7. let double = v=>v+v;
  8. //如果语句为多条,函数体需用{}包裹,且需手动return
  9. let total = v=>{
  10. var sum = 0;
  11. for(let i = 0;i < v;i++){
  12. sum+=i;
  13. }
  14. return sum;
  15. }

2、没有自己的this

箭头函数中访问的 this实际上是其父级作用域中的this,箭头函数本身的this是不存在的。避免了之前先用that=this这种hack写法。同时,使用 bind,call,apply不能修改其this指向


  
  1. var obj1 = {
  2. age: 1,
  3. say: function() {
  4. setTimeout(() => {
  5. console.log(this,this.age); //objl 1 i
  6. },0);
  7. }
  8. };
  9. obj1.say();

3、不能作为构造函数

如果通过new关键字调用,程序会抛出错误。同时也没有原型,不存在prototype这个属性。


  
  1. var Person = (name) => {
  2. this.name = name;
  3. }
  4. var person = new Person("jack");
  5. //Uncaught Type Error: Person is not a constructor

4、没有自己的arguments

可以使用rest参数代替arguments来访问箭头函数的参数列表。


  
  1. var foo = (val) => {
  2. console.log(arguments);
  3. // Uncaught ReferenceError: arguments is not defined
  4. };
  5. foo();

5、箭头函数是函数表达式(函数不提升)

非函数声明,不能像函数声明一样被提升。


  
  1. //函数声明被提升,可以正常执行
  2. console.log(getA)///getA(){}
  3. getA()// A'
  4. function getA() {
  5. console.log('A')
  6. }

  
  1. //箭头函数为表达式,提升的是变量getB,赋值为undefined。下一句执行时由于getB不是函数而报错。
  2. console.log(getB)// undefined
  3. getB();//Uncaught TypeError: getB is nota function
  4. var getB = ()=>{
  5. console.log('B')
  6. }
  7. //注:普通函数表达式var demo=function(){}跟箭头函数表达式一样,也是提升的变量而不是函数

文章来源: root181.blog.csdn.net,作者:前端纸飞机,版权归原作者所有,如需转载,请联系作者。

原文链接:root181.blog.csdn.net/article/details/120106911

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。