2021-01-27 13:42:22 +01:00
``++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.
2021-02-02 15:02:10 +01:00
2020-06-30 12:47:33 +02:00
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
}
}
----