In JavaScript, `eval` is used to evaluate a string as JavaScript code, and `arguments` is used to access function arguments through indexed properties. As a consequence, `eval` and `arguments` should not be bound or assigned, because doing so would overwrite the original definitions of those two reserved words.

What's more, using either of those two names to assign or bind will generate an error in JavaScript strict mode code.

## Noncompliant Code Example

    eval = 17; // Noncompliant
    arguments++; // Noncompliant
    ++eval; // Noncompliant
    var obj = { set p(arguments) { } }; // Noncompliant
    var eval; // Noncompliant
    try { } catch (arguments) { } // Noncompliant
    function x(eval) { } // Noncompliant
    function arguments() { } // Noncompliant
    var y = function eval() { }; // Noncompliant
    var f = new Function("arguments", "return 17;"); // Noncompliant

    function fun() {
      if (arguments.length == 0) { // Compliant
        // do something
      }
    }

## Compliant Solution

    result = 17;
    args++;
    ++result;
    var obj = { set p(arg) { } };
    var result;
    try { } catch (args) { }
    function x(arg) { }
    function args() { }
    var y = function fun() { };
    var f = new Function("args", "return 17;");

    function fun() {
      if (arguments.length == 0) {
        // do something
      }
    }