为什么在 JavaScript 的匿名函数之外没有用于访问 "this" 对象的关键字?

Why is not a keyword for accessing "this" object outside anonymous function in JavaScript?

当使用匿名函数时,我看到的一个常见的方法通过 对象对 JavaScript 中函数的 this 引用是这样的:

var that = this;

collection.forEach(function(e) {
  that.element = e;
});

当然,这可以与语言和打字无关(JavaScript 是我遇到最多的地方)。

所以,因为我很好奇,为什么 that 没有成为该语言或其他语言的标准?它似乎不是一个实现问题,因为它实际上是一个对象引用,仅此而已。

当然,我关注的不是命名为"that"或"self"或"John",而是其目的:通过匿名函数内部的引用访问对象。

因为你的变量名由你决定。例如,在我看来,that 是一个非常愚蠢的名称,用作 this 的别名,因为它的意思是 that。我通常坚持 thiswhatsit 或类似的。但那是 。有些人真的很喜欢 that,它肯定会成为惯用语。有些人喜欢self。或者 me。或者 _this.

但是如果我们讨论正确处理这个问题的方法,在语言中,ES5 和 ES2015 添加了它们:

  • ES5 添加了 Function#bind,它允许您为函数设置特定的 this。 (ES5 的 forEach 和 [大部分] 它的其他数组改进也有一个可以使用的 thisArg 参数。)

  • ES2015(又名 ES6)添加了 箭头函数,它从创建它们的上下文中继承 this(具体来说,从enclosing lexical environment).

ES5 示例:

// Using thisArg:
collection.forEach(function(e) {
  this.element = e;
}, this);

// Using `bind`:
collection.someOtherMethod(function(e) {
    this.whatsit = foo;
}.bind(this));

ES6 示例:

collection.forEach(e => {
    this.whatsit = foo;
});