Unnecessary calls to `.bind()` should not be used.

== Why is this an issue?

The `.bind()` method allows specifying the value of `this` and, optionally, the values of some function arguments. However, if `this` is not used in the function body, calls to `.bind()` do nothing and should be removed.

Calling `.bind()` on arrow functions is a bug because the value of `this` does not change when `.bind()` is applied to arrow functions.

== How to fix it

Remove calls to `.bind()` method.


=== Code examples

==== Noncompliant code example

[source,javascript,diff-id=1,diff-type=noncompliant]
----
let x = function fn() {
    return 123;
}.bind({value: 456}); // Noncompliant


let y = (() => this.body).bind(document); // Noncompliant
----

==== Compliant solution

[source,javascript,diff-id=1,diff-type=compliant]
----
let x = (function callback() {
    return this.body;
}).bind(document); // ok, not an arrow function


let y = (function print(x) {
    console.log(x);
}).bind(this, foo); // ok, binds argument
----


== Resources
=== Documentation

* MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Function/bind[``++Function.prototype.bind()++``]
