箭头函数中的“ this”是否与该箭头函数之外的“ that”相同,是否与“ var that = this”中的“ that”相同?

时间:2019-11-21 11:21:26

标签: javascript arrow-functions

记住箭头功能中的this是一个简单的规则吗?

var that = this;
setTimeout((a, b) => { ... }, 1000);  // the arrow function (a, b) => { ... }

,并且在该箭头功能内,所有this都可以视为与that相同。

这是记住它如何工作的简单规则吗?

当然,如果箭头功能内有任何常规的ES5功能,则该ES5功能内的thisthat不同,但将遵循旧的ES5方式。

更新:实际上,后来,我发现思考它的一种更好方法是,仅将箭头函数与以下内容相同:

(function() { ... }).bind(this)

也就是说,该函数将this删除为“ lexical this”。

1 个答案:

答案 0 :(得分:2)

在箭头函数中考虑“ this”的更好方法是,它根本没有“ this”变量,因此,当您在箭头函数中引用“ this”时,它的作用就像其他变量一样尚未在该范围中定义的对象,它将在该范围中上一层并查找“ this”,如果找不到它,则它将在该范围中上一层,直到找到一个“ this”声明为止或达到顶级范围。

因此,箭头功能取决于词汇this。