大话前端:ES6中箭头函数与传统函数的区别

我们使用办公室的比喻,具体化解释一下传统函数和箭头函数的区别:

想象this关键字是一个“工作证”,这个工作证代表一个函数在任何给定时刻所代表的或属于的对象。

  1. 在传统函数中:这个“工作证”(this)就像是办公室员工的可变工作证。这个员工(函数)在不同的部门(不同的执行上下文)工作时,他的工作证上的部门信息会相应变化。例如,当他在销售部门工作时,他的工作证显示他属于销售部门,负责销售相关的任务。如果他被调到市场部门,他的工作证上的部门信息就会改为市场部门,他的工作内容也相应改变。这样,这个员工的职责(this的值)随着他所在部门的改变而改变。

  2. 在箭头函数中:想象这个员工(箭头函数)有一个固定的工作证,上面永远显示他最初被分配的部门,比如客户服务部门。无论他去办公室的哪个地方,甚至是外出,他的工作证上始终显示他属于客户服务部门,他的工作职责也始终与客户服务相关。在这种情况下,这个员工的职责(this的值)是固定的,始终指向他被创建时所属的部门,不会因为他所处的位置或上下文的改变而改变。

通过这个比喻,this关键字就像是函数的“工作证”,在传统函数中,这个工作证的部门信息会根据函数执行的上下文变化而变化;而在箭头函数中,这个工作证的部门信息是固定的,始终指向函数被创建时所属的部门。

当然,让我们通过一个简单的JavaScript代码示例来进一步说明this关键字在传统函数和箭头函数中的行为差异:

// 定义一个对象
let office = {
    department: "销售部门",
    getDepartment: function() {
        return function() {
            return this.department; // 这里的 'this' 将不指向 office 对象
        }
    },
    getDepartmentArrow: function() {
        return () => this.department; // 这里的 'this' 仍然指向 office 对象
    }
};

// 使用传统函数
let traditionalFunc = office.getDepartment();
console.log(traditionalFunc()); // 输出:undefined,因为 'this' 不指向 office 对象

// 使用箭头函数
let arrowFunc = office.getDepartmentArrow();
console.log(arrowFunc()); // 输出:"销售部门",因为 'this' 指向 office 对象

在这个示例中,office对象有两个方法:getDepartmentgetDepartmentArrowgetDepartment使用传统函数返回另一个函数,而getDepartmentArrow使用箭头函数返回一个函数。

  • getDepartment中,内部返回的函数是一个传统函数,它的this不会自动绑定到office对象。因此,当调用traditionalFunc()时,this.departmentundefined,因为this没有指向office对象。

  • getDepartmentArrow中,返回的是一个箭头函数。箭头函数自动捕获包围它的上下文的this值,即office对象。因此,当调用arrowFunc()时,它正确地输出office对象的department属性值,即“销售部门”。

这个例子展示了如何在不同类型的函数中处理this关键字,以及它们在实际代码中如何表现。

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王蛟(宗佑)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值