== Why is this an issue?

include::../description.adoc[]

Moreover, using chained assignments in declarations is also dangerous because one may accidentally create global variables. Consider the following code snippet: ``++let x = y = 1;++``. If ``++y++`` is not declared, it will be hoisted as global.

=== 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);++``

== How to fix it

include::../how-to-fix-it.adoc[]

=== Code examples

==== Noncompliant code example

[source,javascript,diff-id=1,diff-type=noncompliant]
----
if (val = value() && check()) { // Noncompliant
  // ...
}
----

==== Compliant solution

[source,javascript,diff-id=1,diff-type=compliant]
----
val = value();
if (val && check()) {
  // ...
}
----

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[]
