【问题标题】:this keyword in arrow function [duplicate]箭头函数中的this关键字[重复]
【发布时间】:2024-08-18 11:35:02
【问题描述】:
var cat = {
lives: 9,
jumps: () => {
console.log(this.lives)
 }
}

我听说箭头函数中的 'this' 关键字将指向父作用域,所以我尝试在 node 的全局对象中放置一个 lives=9 的变量,这似乎不起作用,我是否遗漏了什么?

var lives=9
var cat = {
lives: 9,
jumps: () => {
console.log(this.lives)
 }
}

【问题讨论】:

  • 您的第二段代码应该只要在全局范围内就可以工作。否则变量将不会附加到this。在全局范围内this 将是全局对象。
  • 定义this doesn't seems to work?

标签: javascript node.js arrow-functions


【解决方案1】:

箭头函数有一个词法this,这意味着函数内部this的值与函数外部this的值相同。

这并不意味着this 指向一个包含函数外部所有变量的对象。

const anObject = {
  aValue: "example value",
  aMethod: function() {
    console.log("aMethod", this.aValue);

    const arrow = () => {
      console.log("arrow", this.aValue);
    }
    
    arrow();
  }
}

anObject.aMethod();

const copyOfAMethod = anObject.aMethod;
copyOfAMethod();

因为aMethod作为anObject上的方法被调用,所以aMethodthis的值是anObject

因为arrow 是在aMethod 内部声明的,所以this 的值与aMethod 的值相同。

如果函数被复制到别处,因此它具有不同的this 值,那么在调用副本时创建的箭头函数将具有相同的不同值。

【讨论】:

  • 所以 cat 对象的 'this' 是未定义的?
  • @RahulRNair — 不。无论this 的值在对象之外是什么,都将如此。您的代码没有显示足够的上下文来确定它将是什么。
  • 谢谢,我明白了,我对箭头函数的父范围感到困惑,现在代码有意义了,谢谢!
最近更新 更多