javascript - 有人可以解释箭头功能吗?(ES6)
问题描述
我目前正在尝试了解箭头功能。
我知道使用箭头函数的作用域有点不同。但是,我仍然对这一切如何运作感到困惑。
这是一个我不太理解的例子。
// ES5
var obj = {
id: 42,
counter: function counter() {
setTimeout(function() {
console.log(this.id);
}.bind(this), 1000);
}
};
现在,这是完全相同的代码块,但使用了箭头函数。
// ES6
var obj = {
id: 42,
counter: function counter() {
setTimeout(() => {
console.log(this.id);
}, 1000);
}
};
看着它,在我看来,这一切都与水平有关。如果我错了,请纠正我,但是对于 ES5,我们将.bind()
在这个实例中使用该方法,因为没有它,它将返回未定义。我认为这是因为在这种情况下,this
关键字 inconsole.log(this.id);
指的是counter
对象,默认情况下,它找不到对象id
的 the obj
。
有点令人困惑,但我认为就是这样。现在,使用箭头功能,我不确定为什么console.log(this.id);
会起作用。这是否意味着只要它在同一个代码块中,就可以使用它?
非常感谢!
解决方案
在第一个示例中,如果您不使用bind()
,this
则将引用setTimeout
回调。因为你使用.bind()
了你改变了对对象的this
引用。obj
这就是你得到42
as的原因this.id
。
在第二个示例中,bind()
不需要,因为箭头函数没有自己的this
,它与 parent 相同this
,所以在这种情况下它指向obj
对象,这就是为什么你也42
得到this.id
推荐阅读
- amazon-web-services - 更新 AWS Athena 数据和表以重命名列
- python - 替换部分字符串以获得混乱数据(更快的方式而不是字符串替换)?
- node.js - 从节点应用程序“未能检测到”构建包构建 Heroku
- python - 如何从值列表中删除重复项
- excel - VBA Excel - FileFilter 阻止 Workbooks.Open
- python - 从动态网页抓取数据时从选择对象中选择一个选项
- java - 获取 LDAP:错误代码 49 - Invalid Credentials 。登录期间的嵌套异常是 javax.naming.AuthenticationException
- javascript - naturalHeight 和 naturalWidth Javascript 的问题
- java - Java MySQL Webapp - 查询只显示一个条目?
- angular - 可观察到的角度空数组