javascript - 使用箭头函数引用与内联箭头函数时 javascript 中的混淆行为
问题描述
由于this
在箭头函数中指的是词法上下文,因此预计以下代码将记录对象本身:
const arrow = () => {
console.log(this);
};
const object = {
render() {
setTimeout(arrow, 1000);
},
};
object.render();
但是它实际上记录了global
对象。这让我感到困惑,因为当我使用内联箭头函数时,它可以正常工作并记录obj
:
const object = {
render() {
setTimeout(() => {
console.log(this);
}, 1000);
},
};
object.render();
使用相同箭头函数的内联版本,代码会记录对象本身,这正是我想要的。我真的很困惑为什么会发生这种情况。它们都是箭头函数,不是吗?
*更新:感谢您的回答!因此this
,箭头函数在定义时保留引用。但是this
在课堂上呢?例如,
class MyClass {
handleChange = () => {
console.log(this);
};
render() {
setTimeout(this.handleChange, 1000);
}
}
const myclass = new MyClass();
myclass.render();
在这种情况下,this
inhandleChange
指的是 object myclass
。但是如果它保留原始引用,它不应该引用global
它的定义时间吗?
解决方案
推荐阅读
- sql - 如何聚合数据以计算 SQL 中的百分位数?
- java - Android Studio - 在不更改当前布局的情况下使活动可滚动?
- scala - 使用火花流解析事件中心消息
- oracle - Corda 上 Oracle 数据库的 JDBC 驱动程序名称是什么?
- python - 如何使用 numpy 进行原子添加
- azure-logic-apps - 如何将字符串与triggerbody连接起来?
- python - 循环更新现有的excel模板
- c# - 虚拟助手模板目前使用 TelemetryClient 但已弃用
- reactjs - JS 未从 API 加载任何内容,并且无法使用 map 获取数据,因为它为 null
- xml - 父级属性的 XPath 不包含特定字符?