== Why is this an issue?

Assigning ``++this++`` to a local variable is a way to reference parent context inside inner functions. In TypeScript when using arrow functions this happens automatically.

This rule raises an issue when ``++this++`` is assigned to a local variable.


=== Noncompliant code example

[source,javascript]
----
function Foo() {
  let that = this;  // Noncompliant
  that.val = 0;

  setInterval(function() {
    that.val++;
  }, 1000);
}
----


=== Compliant solution

[source,javascript]
----
function Foo() {
  this.val = 0;

  setInterval(() => {
    this.val++;
  }, 1000);
}
----


=== Exceptions

This rule ignores ``++this++`` used for destructuring.

[source,javascript]
----
const { foo, bar } = this;
----

The rule also ignores alias references of ``++this++`` in generators.

[source,javascript]
----
const self = this;
return function* () {
  let result = self.next();
  while (!result.done) {
    yield result.value;
    result = self.next();
  }
};
----

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

Refactor this code to use an arrow function instead of assigning "this".


=== Highlighting

Assignment statement


endif::env-github,rspecator-view[]
