== Why is this an issue?

include::../description.adoc[]

Moreover, using chained assignment in declarations is also dangerous because one may accidentally create global variables, e.g. in ``++let x = y = 1;++``, if ``++y++`` is not declared, it will be hoisted as global.

=== Noncompliant code example

[source,javascript]
----
if (val = value() && check()) { // Noncompliant
  // ...
}
----

=== Compliant solution

[source,javascript]
----
val = value();
if (val && check()) {
  // ...
}
----

=== Exceptions

The rule does not raise issues for the following patterns:


* chained assignments: ``++a = b = c = 0;++``
* relational assignments: ``++(a = 0) != b++``
* sequential assignments: ``++a = 0, b = 1, c = 2++``
* assignments in lambda body: ``++() => a = 0++``
* conditional assignment idiom: ``++a || (a = 0)++``
* assignments in (do-)while conditions: ``++while (a = 0);++``

include::../see.adoc[]

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

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

include::../message.adoc[]

include::../highlighting.adoc[]

'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]

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