理解箭头函数中的 this 彻底弄懂箭头函数中的 this:



1. 箭头函数没有自己的 this 值
箭头函数不会创建自己的 this 值,而是捕获最近的父级非箭头函数作用域中的 this 值。这意味着在箭头函数内部,this 的值与定义该箭头函数时所在的上下文绑定,而不是在执行该函数时才决定。

2. 最外层箭头函数的 this 值
如果最外层的箭头函数嵌套在一个非箭头函数中,则该箭头函数会从该非箭头函数中继承 this 值。例如:

javascript
const obj = {
  name: 'ChatGPT',
  sayHello: function() {
    const greet = () => {
      console.log(`Hello, my name is ${this.name}`);
    }
    greet();
  }
}
obj.sayHello(); // 输出 "Hello, my name is ChatGPT"
在上面的代码中,在 sayHello() 方法中定义了一个箭头函数 greet(),它继承了 sayHello() 的 this 值,也就是 obj 对象。因此,输出结果为 "Hello, my name is ChatGPT"。

3. 箭头函数中的 this 值不可更改
由于箭头函数中的 this 值是绑定在定义时的上下文中,所以它无法被更改。即使使用 bind()、apply() 或 call() 等方法也无济于事。例如:

javascript
const obj = {
  name: 'ChatGPT',
  sayHello: function() {
    const greet = () => {
      console.log(`Hello, my name is ${this.name}`);
    }
    greet.call({ name: 'Tom' });
  }
}
obj.sayHello(); // 输出 "Hello, my name is ChatGPT"
在上面的代码中,尝试通过 greet.call({ name: 'Tom' }) 修改 greet() 中的 this 值为 { name: 'Tom' },但是这个操作是无效的。因为在 greet() 函数中,this 已经被捕获并绑定到了 obj 对象,无法再次更改。

4. 可以为箭头函数提供固定的 this 值
如果需要让箭头函数使用固定的 this 值,可以使用闭包或者 ES6 的 bind() 方法来实现。例如:

javascript
const person = {
  name: 'ChatGPT',
  sayHello: function() {
    setTimeout(function() {
      console.log(`Hello, my name is ${this.name}`);
    }.bind(this), 1000);
  }
}
person.sayHello(); // 输出 "Hello, my name is ChatGPT"
在上面的代码中,使用 bind() 将箭头函数的 this 值绑定到了 person 对象,让箭头函数使用 person 对象的 name 属性。

5. 箭头函数与普通函数的区别
总结一下,箭头函数和普通函数最大的区别就是 this 的指向问题。普通函数中的 this 是在函数被调用时绑定的,而箭头函数中的 this 是在定义时绑定的。在实际编程中,需要根据具体情况选择使用哪种函数。






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值