箭头函数与普通函数

本文探讨了JavaScript中的箭头函数与普通函数的差异,包括this的指向规则。通过示例展示了在定时器中普通函数导致的this混乱问题,并如何使用箭头函数简化处理。总结了箭头函数的主要优势在于其this的绑定方式,以及更简洁的语法结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

普通函数

  function fun(){
    return 100;
  }
  console.log(fun());

还可以写成

  const fun = function () {
    return 100;
  }
  console.log(fun());

箭头函数的写法

  const fun = () => {
    return 100;
  }
  console.log(fun());

还可以简写成

  const fun = () => 100;
  console.log(fun());

在箭头函数中,()内是函数的参数,如(x,y),当函数只有一个参数时,可以省略(),{}中是函数体,当函数体只有一条返回值时,可以省略{}和ruturn;

箭头函数有什么好处?先看一段代码

  let obj = {
    name: "小明",
    age: 2,
    sayName() {
      console.log(`我是${this.name}`);
    }
  }
  obj.sayName();

先定义了一个obj对象,obj中有一个sayName方法输出name,这是调用obj.sayName()会输出'我是小明',但如果给sayName加一个计时器

  let obj = {
    name: "小明",
    age: 2,
    sayName() {
      setTimeout(function () {
        console.log(`我是${this.name}`);
      }, 500)
    }
  }
  obj.sayName();

这是调用obj.sayName()就只能输出'我是',为什么没有找到this.name呢?打印看一下this

发现sayName里的this会指向obj,而setTimeout里的this指向了Window,原因找到了,因为setTimeout是Window的方法,在es5中的通常采用传值的方式解决

    sayName() {
      let self = this;
      setTimeout(function () {
        console.log(`我是${self.name}`);
      }, 500)
    }

现在sayName中保存一份sayName的this,然后调用这个this就可以访问了。

如果换成箭头函数就简单了

    sayName() {
      setTimeout(() => {
        console.log(`我是${this.name}`);
      }, 500)
    }

箭头函数的this绑定的是当前的作用域。

总结箭头函数和普通函数的区别:

普通函数,谁调用这个函数,this指向谁

箭头函数,在哪里定义函数,this指向谁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值