Avatar ·

如何在JavaScript中正确访问callback函数内的`this`?

大家好!我刚开始学习JavaScript,遇到了一个无法解决的问题。我有一个对象`user`,其中包含属性`name`和方法`greet`。我希望`greet`方法在2秒后输出带有用户名的问候语。为此,我使用了`setTimeout`。但当我运行代码时,输出的是`undefined`而不是名字。这是我的代码:\n\n```javascript\nconst user = {\n name: '安娜',\n greet: function() {\n setTimeout(function() {\n console.log(`你好,${this.name}!`);\n }, 2000);\n }\n};\n\nuser.greet(); // 输出“你好,undefined!”\n```\n\n我明白问题在于`setTimeout`的callback函数中丢失了`this`的上下文。但我不理解为什么会发生这种情况以及如何修复。我尝试阅读文档,但内容太复杂。请用简单的话解释什么是JavaScript中的`this`,以及如何正确将其传递给callback。感谢提供带解释的示例!\n<<>>\n

问题